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

我有一个简单的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.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被替换为+=