Java和Python之间的套接字连接
我有一个简单的Java连接到我的Python。 在客户机中,我希望发送一些输入中给定大小的数据:我希望首先发送一个带有数据大小的Java和Python之间的套接字连接,java,python,sockets,socketserver,Java,Python,Sockets,Socketserver,我有一个简单的Java连接到我的Python。 在客户机中,我希望发送一些输入中给定大小的数据:我希望首先发送一个带有数据大小的整数,然后发送字节数据块 这是客户: Integer size = 1234 Socket so = new Socket("10.151.0.248", 8000); byte[] bytes = new byte[size]; DataOutputStream out = new DataOutputStream(so.getOutputStream()); out
整数
,然后发送字节
数据块
这是客户:
Integer size = 1234
Socket so = new Socket("10.151.0.248", 8000);
byte[] bytes = new byte[size];
DataOutputStream out = new DataOutputStream(so.getOutputStream());
out.writeInt(size);
out.write(bytes);
从服务器端,我希望读取首先到达的数据量,然后再次读取流,直到接收到所有数据;作为最后一步,我将向客户端发回ACK
这是服务器:
def handle(self):
tot_data = []
length = self.request.recv(4)
size = struct.unpack("!i", length)[0]
while len(tot_data) < size:
data = self.request.recv(size - len(tot_data))
if not data: break
tot_data.append(data)
data = bytes(b"ACK")
# just send back the ack when transfer completed
self.request.sendall(data)
def句柄(自):
tot_数据=[]
长度=self.request.recv(4)
大小=解包结构(“!i”,长度)[0]
而len(tot_数据)
我可以在服务器中检索数据的大小,但是当我尝试从流中读取实际数据时,只会再次检索到4个字节,然后recv()
仍然被阻塞,等待更多数据。我想,首先,检索所有数据,然后在传输完成后发送回ACK
有什么建议吗?Python端的
句柄
方法有一个问题self.request.recv
返回一个字符串(对于Python2.x,对于Python3,它将是字节),然后在数组中组装字符串。因此,数组的长度只是块的数量,而不是接收的字节数
你应该写:
def handle(self):
tot_data = b""
length = self.request.recv(4)
size = struct.unpack("!i", length)[0]
while len(tot_data) < size:
data = self.request.recv(size - len(tot_data))
if not data: break
tot_data += data
data = bytes(b"ACK")
# just send back the ack when transfer completed
self.request.sendall(data)
def句柄(自):
tot_数据=b“”
长度=self.request.recv(4)
大小=解包结构(“!i”,长度)[0]
而len(tot_数据)
我正在努力理解修复程序。tot_data=b“”是问题的修复方法?@sunrise76:修复方法是连接字节。因此,tot_data
必须初始化为b”“
,并且累加必须是tot_data+=data
现在就得到了它。append被替换为+=