前几天遇到个问题需要用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)
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编程》
|