IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python与java通信——使用socket模块 -> 正文阅读

[Python知识库]python与java通信——使用socket模块

前几天遇到个问题需要用python和java通信,网上这种帖子很多,比如runtime方法,py4j方法等。
但是runtime方法似乎只能向python传参,不能接受python传回;
py4j看了半天没理解。
最后python选择了socket模块,java那边选择了一个插件(hutool)

import socket

IP = ''			# 主机地址为空字符串,表示绑定本机所有网络接口ip地址
PORT = 4000		# 端口号,java那边也要保持一致
BUFLEN = 4048	# 缓冲区大小,定义一次从socket缓冲区最多读入4048个字节数据,可以不和java那边定义的一致
# 创建socket对象,同时设置通信模式,AF_INET代表IPv4,SOCK_STREAM代表流式socket,使用的是tcp协议
listenSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定到我们刚刚设置的ip和端口元组,代表我们的服务运行在本机的PORT端口上
# 在构建socket的时候需要用到ip和端口,必须是元组的形式。
# 另外,因为是本机上的两个程序通信,所以设置成localhost,
# 如果要和网络上的其他主机进行通信,则填上相应主机的ip地址,端口的话随便设置一个,不要和已知的一些服务冲突就行
listenSocket.bind((IP, PORT))
# 开始监听,5位最大挂起的连接数
listenSocket.listen(5)
# accept()方法被动接受客户端连接,阻塞,等待连接. client是客户端的socket对象,可以实现消息的接收和发送,addr表示客户端的地址
client, addr = listenSocket.accept()
print('接受一个客户端连接:', addr)

# 无限循环,实现反复接收请求
while True:
    # 尝试读取对方发送的消息
    # BUFLEN 指定从接收缓冲里最多读取多少字节
    recev = client.recv(BUFLEN)  # 代表从发过来的数据中读取BUFLEN大小byte类型的数据

    # 如果返回空bytes,表示对方关闭了连接
    # 退出循环,结束消息收发
    if not recev:
        break

    # 读取的字节数据是bytes类型,需要解码为字符串
    info = recev.decode()
    print(f"收到:{info}")

	# 发送消息给客户端,发送的消息必须是byte类型
    client.sendall(str(dispacher(info=info)).encode())    # encode() 用于将 str 类型转换成 bytes 类型

client.close()          # 关闭连接
listenSocket.close()

我的任务:java给python传递3个参数a,b,c;python给java传回一个列表(不定长)

因为socket通信试了一些传递bytes数组的方法均失败(不是乱码就是长度不够),所以索性先转为str,再转为bytes类型。

  • java发送"a,b,c",python接受后,params_list = str.split(',')a,b,c = params_list[0], params_list[1], params_list[2]
  • python给发送如"[1,2,3]",java接受后,将字符串再处理为数组即可

参考:
《socket编程》

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:26:58  更:2022-02-26 11:27:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:21:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码