【网络编程5】Java与Python套接字Socket通信的例子

今天看一本Python黑客相关的书的第一章部分,边看边在Linux Ubuntu Kylin 32位系统的终端打Python代码,就基本会用Python语言了,包括socket内容。刚好我之前学习Java Socket通信,今天就试着用Python写客户端,并与Java服务器端通信,经过一些调试,最后成功了。Github根链接是:https://github.com/1040003585/javanettextbook/tree/master/Java_Python
   ——惠州学院13网络工程 吴成兵 20160621

目录

  • 目录
  • 一 特别说明
    • 1 Python写客户端特别说明
    • 2 Java服务器端特别说明
      • 21 接收数据特别说明
      • 22 发送数据特别说明
  • 二 操作运行
    • 1 操作步骤
    • 2 运行截图
  • 三 源代码
    • 1 Python写客户端代码
    • 2 Java服务器端代码

一 特别说明

1.1 Python写客户端特别说明

  • indata=input():输入字符(串)数据为加引号,如:‘ab’;
  • s.send(str(indata)+”\n”) :要加“\n”,这样就是完成发送一条数据过去;
  • s.recv(1024).strip(‘\n’) :接收1024B大小的数据,最好过滤掉回车符号;

1.2 Java服务器端特别说明

1.2.1 接收数据特别说明

BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String string=br.readLine();
if(string==null)continue;       

1.2.2 发送数据特别说明

PrintWriter pw=new PrintWriter(socket.getOutputStream(),true);
pw.println(string);

二 操作运行

2.1 操作步骤

  1. 确保linux系统安装了Java JDK和Python,即在Terminal终端中输入“java”、“javac”和“python”有正常反馈效果。
  2. 在同一个目录下,新建Server.java文件,并存放Java服务器端代码放;新建Client.py,并存放Python代码。
  3. 在该目录打开Terminal终端,输入javac Server.java,编译服务器端代码,生成Server.class。
  4. 输入java Server运行服务器端,输入python Client.py运行客户端。

2.2 运行截图

三 源代码

3.1 Python写客户端代码

import socket

socket.setdefaulttimeout(2)
s=socket.socket()
s.connect(("localhost",9955))
print("C:input data (with 'end' for exit the program)")
goon=True
while(goon):
    print "C:-------------------------------------"
    print "C:Please input data:"
    indata=input()
    s.send(str(indata)+"\n") #must add "\n"
    data=s.recv(1024).strip('\n')
    if "end"!=data :
        print("C:receive result:"+data)
    else:
        goon=False;
        print("C:end...")
s.close()

3.2 Java服务器端代码

import java.io.*;
import java.net.*;
import java.util.*;

public class Server {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.out.println("Swait for connect......");
        try {
            ServerSocket serverSocket = new ServerSocket(9955);
            Socket socket=serverSocket.accept();
            System.out.println("S connet from:"+socket.getInetAddress().getHostAddress());

            //DataInputStream dis=new DataInputStream(socket.getInputStream());//dis.readUTF();// un success!
            //DataOutputStream dos=new DataOutputStream(socket.getOutputStream());//dos.writeUTF(string);dos.flush();

            BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));//br.readLine();// success...
            PrintWriter pw=new PrintWriter(socket.getOutputStream(),true);//pw.println(string);

            boolean goon=true;
            while(goon){
                //String string=dis.readUTF();
                String string=br.readLine();
                if(string==null)continue;
                System.out.print("S:receive data:("+string+")");
                if(string.equals("end")==false){
                    string=dealWith(string);
                    //dos.writeUTF(string);
                    //dos.flush();
                    pw.println(string);
                    System.out.println(" ,S:计算结果("+string+") sent...");
                }else{
                    goon=false;
                    //dos.writeUTF("end");
                    //dos.flush();
                    pw.println("end");
                    System.out.println("\n");
                }

            }

            serverSocket.close();
            //dis.close();
            //dos.close();
            br.close();
            pw.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static String dealWith(String string){
        double radius=0.0;
        try {
            radius=Double.parseDouble(string);
        } catch (NumberFormatException e) {
            return "NumberFormatException";
        }
        if(radius<0)return "data can't less 0";
        double area=radius*radius*Math.PI;
        return Double.toString(area);
    }

}

文中所有源代码

Wu_Being博客声明:本人博客欢迎转载,请标明博客原文和原链接!谢谢!
《Java与Python套接字Socket通信的例子》:
http://blog.csdn.net/u014134180/article/details/51730369

如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有动力写下去。

时间: 2024-10-06 19:18:07

【网络编程5】Java与Python套接字Socket通信的例子的相关文章

【网络编程6】Java与C语言套接字Socket通信的例子

继上一篇博客<Java与Python套接字Socket通信的例子>,今晚又完成了Java与C语言套接字通信过程,经过一些调试,最后成功了.Github根链接是:https://github.com/1040003585/javanettextbook/tree/master/Java_C --惠州学院13网络工程 吴成兵 20160625 目录 目录 一 特别说明 1 C语言写客户端特别说明 2 Java服务器端特别说明 21 接收数据特别说明 22 发送数据特别说明 二 操作运行 1 操作步

[python] 专题七.网络编程之套接字Socket、TCP和UDP通信实例

        很早以前研究过C#和C++的网络通信,参考我的文章:                  C#网络编程之Tcp实现客户端和服务器聊天                 C#网络编程之套接字编程基础知识                 C#网络编程之使用Socket类Send.Receive方法的同步通讯        Python网络编程也类似.同时最近找工作笔试面试考察Socket套接字.TCP\UDP区别比较多,所以这篇文章主要精简了<Python核心编程(第二版)>第16章内

【网络编程1】Java套接字Socket

这篇博客是本人学习<Java网络程序设计>书中第4章套接字的学习总结.初学者网友学习这篇Java套接字文章,如果难于理解文章前面理论部分,可以先运行后面的程序,边看运行后面的程序边理解前面的原理,这对初学者是最好的方法.所有源代码都在文章后面我的github链接代码中. --惠州学院 13网络工程 吴成兵 20160607 目录 1 目录 1 一 流套接字概述 二 服务器套接字ServerSocket 21 ServerSocket的工程过程 22 ServerSocket构造方法 23 Se

【网络编程3】Java组播套接字

这篇博文是本文学习<Java网络程序设计>书中第5章中组播套接字的学习总结.所有源代码都在文章后面我的github链接代码中. --惠州学院13网络工程 吴成兵 20160612 目录 1 目录 1 一 组播套接字概述 二 MulticastSocket 21 MulticastSocket构造方法 22MulticastSocket常用方法 三 组播套接字编程 31 使用组播套接字发送数据的过程 32 使用组播套接字接收数据的过程 四 组播套接字编程示例 41 组播套接字发送和接收程序 41

《Python核心编程(第3版)》——2.3 套接字:通信端点

2.3 套接字:通信端点 本节将介绍套接字(socket),给出有关其起源的一些背景知识,并讨论各种类型的套接字.最后,将讲述如何利用它们使运行在不同(或相同)计算机上的进程相互通信. 2.3.1 套接字 套接字是计算机网络数据结构,它体现了上节中所描述的"通信端点"的概念.在任何类型的通信开始之前,网络应用程序必须创建套接字.可以将它们比作电话插孔,没有它将无法进行通信. 套接字的起源可以追溯到20世纪70年代,它是加利福尼亚大学的伯克利版本UNIX(称为BSD UNIX)的一部分.

java网络编程错误java.net.ConnectException: Connection refused: connect求教

问题描述 java网络编程错误java.net.ConnectException: Connection refused: connect求教 刚开始学习java网络编程,在书上看到一段代码,就动手试一下,结果出现下面错误: java.net.ConnectException: Connection refused: connect 源代码如下: import java.io.*; import java.net.*; class lx01 { public static void main(S

如何编写简单的配合认证的基于JAVA套接字的通信程序

问题描述 我是一个初学者,现在正在编写一个配合认证的基于JAVA套接字的通信程序.老师要求:终端1和终端2要进行通信,必需通过第三台机器的简单认真.哪位高手帮帮忙吧!

Linux下套接字详解(二)----套接字Socket

在前面我们讲了TCP/IP.TCP和UDP的一些基本知识,但是协议只有一套,而我们系统多个TCP连接或多个应用程序进程必须通过同一个 TCP协议端口传输数据.为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口. 套接口可以说是网络编程中一个非常重要的概念,linux以文件的形式实现套接口,与套接口相应的文件属于sockfs特殊文件系统,创建一个套接口就是在sockfs中创建一个特殊文件,并建立起为实现套接口功能的相关数据结构

Java套接字(Socket)网络编程入门_java

网络应用模式主要有: 主机/终端模式:集中计算,集中管理: 客户机/服务器(Client/Server,简称C/S)模式:分布计算,分布管理: 浏览器/服务器模式:利用Internet跨平台. www(万维网)就是建立在客户机/服务器模式上,以HTML语言和HTTP协议为基础,能够提供各种Internet服务的信息浏览系统.网络信息放在主机的不同位置,www服务器利用超文本链路链接各项信息.www客户机(浏览器Brower)负责与服务器建立联系,向服务器发送请求,处理HTML超媒体,提供图形用户