请参见下方的编辑。
我有两个通过套接字通信的程序。我试图从一个程序发送一块数据到另一个程序。这在使用某些测试数据时可以正常工作,但在使用其他数据时失败了。
s.sendall('%16d' % len(data))
s.sendall(data)
print(len(data))
发送到
size = int(s.recv(16))
recvd = ''
while size > len(recvd):
data = s.recv(1024)
if not data:
break
recvd += data
print(size, len(recvd))
在一端:
s = socket.socket()
s.connect((server_ip, port))
以及另一个:
c = socket.socket()
c.bind(('', port))
c.listen(1)
s,a = c.accept()
在我的最新测试中,我发送了一个7973903字节的数据块,但接收方报告大小为7973930。
为什么接收的数据块会差27个字节?
还有其他问题吗?
Python版本为2.7或2.5.4(如果有关系)。
编辑:啊哈——我可能读取了发送缓冲区的末尾。如果剩余字节数小于1024,则只需读取剩余字节数。这种数据传输有标准技术吗?我感觉我在重新发明轮子。
编辑2:我犯了错误,读取了系列中的下一个文件。我正在发送file1,最后一个块是997个字节。然后我发送file2,所以在file1末尾的recv(1024)读取file2的前27个字节。
我将在另一个问题上开始如何更好地处理这个问题。
谢谢大家。 提问和阅读评论帮助我集中注意力。