前几天遇到个问题需要用python和java通信,网上这种帖子很多,比如runtime方法,py4j方法等。
但是runtime方法似乎只能向python传参,不能接受python传回;
py4j看了半天没理解。
最后python选择了socket模块,java那边选择了一个插件(hutool)
import socket
IP = ''
PORT = 4000
BUFLEN = 4048
listenSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listenSocket.bind((IP, PORT))
listenSocket.listen(5)
client, addr = listenSocket.accept()
print('接受一个客户端连接:', addr)
def dispacher(info="itemCF,1,10"):
"""
接受的字符串信息,判断是哪种类型,分发给不同函数
:param info: 传过来的信息
:return:
"""
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:
recev = client.recv(BUFLEN)
if not recev:
break
info = recev.decode()
print(f"收到:{info}")
client.sendall(str(dispacher(info=info)).encode())
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编程》
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)