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

简介: 今天看一本Python黑客相关的书的第一章部分,边看边在Linux Ubuntu Kylin 32位系统的终端打Python代码,就基本会用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()));
AI 代码解读
String string=br.readLine();
if(string==null)continue;       
AI 代码解读

1.2.2 发送数据特别说明

PrintWriter pw=new PrintWriter(socket.getOutputStream(),true);
AI 代码解读
pw.println(string);
AI 代码解读

二 操作运行

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()
AI 代码解读

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);
    }

}
AI 代码解读

文中所有源代码

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

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

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

目录
相关文章
Java和Python在企业中的应用情况
Java和Python在企业中的应用情况
145 7
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
以上内容是一个简单的实现在Java后端中通过DockerClient操作Docker生成python环境并执行代码,最后销毁的案例全过程,也是实现一个简单的在线编程后端API的完整流程,你可以在此基础上添加额外的辅助功能,比如上传文件、编辑文件、查阅文件、自定义安装等功能。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
Python 高级编程与实战:深入理解网络编程与异步IO
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧、数据科学、机器学习、Web 开发和 API 设计。本文将深入探讨 Python 在网络编程和异步IO中的应用,并通过实战项目帮助你掌握这些技术。
Java socket获取gps定位
通过Java Socket编程获取GPS定位信息可以实现实时的地理位置跟踪。本文介绍了如何搭建Socket服务器、解析GPS数据以及实现客户端发送GPS数据的流程。希望这篇文章能为开发者提供清晰的指导,帮助构建高效的GPS定位系统。
62 7
Python网络编程小示例:生成CIDR表示的IP地址范围
本文介绍了如何使用Python生成CIDR表示的IP地址范围,通过解析CIDR字符串,将其转换为二进制形式,应用子网掩码,最终生成该CIDR块内所有可用的IP地址列表。示例代码利用了Python的`ipaddress`模块,展示了从指定CIDR表达式中提取所有IP地址的过程。
114 6
在比较Java和Python哪个更易学
在比较Java和Python哪个更易学
60 4
Java和Python
Java和Python
55 2
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第26天】Python 是一门功能强大且易于学习的编程语言,Twisted 框架以其事件驱动和异步IO处理能力,在网络编程领域独树一帜。本文深入探讨 Twisted 的异步IO机制,并通过实战示例展示其强大功能。示例包括创建简单HTTP服务器,展示如何高效处理大量并发连接。
93 1
Python网络编程:从Socket到Web应用
在信息时代,网络编程是软件开发的重要组成部分。Python作为多用途编程语言,提供了从Socket编程到Web应用开发的强大支持。本文将从基础的Socket编程入手,逐步深入到复杂的Web应用开发,涵盖Flask、Django等框架的应用,以及异步Web编程和微服务架构。通过本文,读者将全面了解Python在网络编程领域的应用。
82 1
|
5月前
|
[Java]Socket套接字(网络编程入门)
本文介绍了基于Java Socket实现的一对一和多对多聊天模式。一对一模式通过Server和Client类实现简单的消息收发;多对多模式则通过Server类维护客户端集合,并使用多线程实现实时消息广播。文章旨在帮助读者理解Socket的基本原理和应用。
57 1

热门文章

最新文章