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

import socketIP = ''          # 主机地址为空字符串,表示绑定本机所有网络接口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)def dispacher(info="itemCF,1,10"):"""接受的字符串信息,判断是哪种类型,分发给不同函数:param info:    传过来的信息:return:"""# info和下面的都是我自己用于推荐系统的,你需要换成你自己的info_list = info.split(',')print(info_list)if info_list[0] == "itemCF":return itemCF_prediect(iid=int(info_list[1]), n=int(info_list[2]))if info_list[0] == "userCF":return userCF_prediect(uid=int(info_list[1]), n=int(info_list[2]))if info_list[0] == "lfm":return lfm_prediect(uid=int(info_list[1]), n=int(info_list[2]))# 无限循环,实现反复接收请求
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与java通信——使用socket模块相关推荐

  1. python转换函数使用_Python Socket模块中的IP转换函数

    Python Socket模块中包含一些有用IP转换函数,说明如下: socket.ntohl(x) // 类似于C语言的ntohl(x) 把32位正整数从网络序转换成主机字节序. socket.nt ...

  2. Python学习日记(三十) Socket模块使用

    Socket(套接字) 套接字是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信.网 ...

  3. python和java对接数据的简单实现

    一.python检测到的图片能够在平台进行展示 开发环境: 电脑一:python实现人体检测,并实时保存有异常动作的图片, 电脑二:Java实现平台开发 问题描述: 电脑一检测到异常图片时,将该异常图 ...

  4. python socket模块实现udp通信_Python基于socket模块实现UDP通信功能示例

    Python基于socket模块实现UDP通信功能示例 本文实例讲述了Python基于socket模块实现UDP通信功能.分享给大家供大家参考,具体如下: 一 代码 1.接收端 import sock ...

  5. python共享内存通信mapofview_python map eval strPython socket模块实现的udp通信功能示例...

    本文实例讲述了Python socket模块实现的udp通信功能.分享给大家供大家参考,具体如下: socket介绍 socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要 ...

  6. python套接字编程_Python套接字编程(1)——socket模块与套接字编程

    在Python网络编程系列,我们主要学习以下内容: 5. 常见的Python异步编程框架 6. 协程在Python网络编程中的使用 本文介绍Python下的基本套接字编程,主要基于 socket 模块 ...

  7. python中socket模块常用吗_python网络学习笔记——socket模块使用记录

    此文章记录了笔者学习python网络中socket模块的笔记. 建议初次学习socket的读者先读一遍socket模块主要函数的介绍. socket模块的介绍可以参考笔者的前一篇关于socket官方文 ...

  8. python中socket模块常用吗_python中socket模块详解

    socket模块简介 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.socket通常被叫做"套接字",用于描述IP地址和端口,是一个通信 ...

  9. Python 进阶 之 socket模块

    Python Socket 编程详细介绍 转载地址:https://gist.github.com/kevinkindom/108ffd675cb9253f8f71?signup=true Pytho ...

  10. python 网络编程模块_Python网络编程之socket模块

    1.网络协议 网络协议是网络中进行数据交换与传输所需的规则.标准或约定,得到实用主要由语法(数据与信息的结构形式).语义和同步(事件的实现顺序)三个要素组成. 世界上最先提出的协议理论模型是由国际标准 ...

最新文章

  1. dmol3给定关键字不在字典中_python中的数据结构与算法(2):字典与集合
  2. 比较不错的一个ios找茬游戏源码
  3. 人脸识别成创业热门,统计企业超1万家,刷脸支付项目将迎来热潮
  4. linux connect自动重连,Linux系统中使用sshfs挂载远程主机的目录到本地系
  5. c语言 双线程,如何用C语言实现多线程
  6. Windows 8 各版本功能区别一览表
  7. 远程桌面无法连接服务器,启动Terminal Services 服务报1053错误
  8. 我的天!我靠这个拥有了自己第一架无人机!
  9. ubuntu ssh密钥_生成SSH密钥以在Ubuntu中进行无密码登录
  10. 使用spring cloud,nacos,dubbo,gateway搭建微服务
  11. tcpserver检测断开qt_QTcpServer或QTcpClient(在服务器端)知道,已连接的客户端现已断开连接...
  12. 关于“多目的地址的pix防火墙nat”的总结
  13. DevOps工具图谱分析(一)
  14. uniapp 默认首页 进入登录页闪烁问题
  15. Sherlock之Instructions指令介绍(Sherlock Version: 7.2.5.1 64-bit)
  16. Linux 权限相关指令
  17. 使用Arduino开发板进行语音识别
  18. 月光女神Sarah Brightman 莎拉·布莱特曼视频集锦
  19. 漫游测试之性能测试(5.3-索引分析)
  20. 毕业后升级打怪程序人生

热门文章

  1. python 文本转excel_如何使用python将txt文件中的数据转换为Excel文件
  2. 如何将.txt中的数据导入.excel
  3. matlab官方中文网站
  4. R及RStudio软件安装教程
  5. 遇到错误(firefox 打不开 重置winsock bug)
  6. Python设计模式:责任链模式
  7. 记一次Springboot 启动错误(三) xxx.jar中没有主清单属性
  8. 数据结构学习-Java实现复数类
  9. Python中虚拟环境与网络IP地址、端口、socket套接字【详细】
  10. 技术干货 | 六分钟学会使用 HBuilder 引入构建 mPaaS 小程序