【网络编程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.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 运行截图

Java与Python套接字Socket通信的例子

三 源代码

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

Wu_Being 吴兵博客接受赞助费二维码

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值