【发布时间】:2018-04-04 07:42:05
【问题描述】:
我正在使用 TCP 和 Python 套接字,将数据从一台计算机传输到另一台计算机。但是,recv 命令在服务器端读取的内容超出了应有的内容,我找不到问题。
client.py
while rval:
image_string = frame.tostring()
sock.sendall(image_string)
rval, frame = vc.read()
server.py
while True:
image_string = ""
while len(image_string) < message_size:
data = conn.recv(message_size)
image_string += data
消息的长度是921600 (message_size),所以它与sendall一起发送,但是在收到时,当我打印到达消息的长度时,长度有时是错误的,有时是正确的。
921600
921600
921923 # wrong
922601 # wrong
921682 # wrong
921600
921600
921780 # wrong
如您所见,错误的到达没有模式。当我使用 TCP 时,我期望更多的一致性,但是似乎缓冲区混合在一起并且以某种方式接收下一条消息的一部分,因此产生了更长的消息。 这里有什么问题?
我尝试只添加代码的相关部分,如果您愿意,我可以添加更多,但是代码在localhost上运行良好,但在两台计算机上都失败了,所以除了传输部分应该没有错误。
Edit1:我检查了这个question,它提到客户端中的所有发送命令可能不会被服务器中的单个recv接收,但我不明白如何应用这个要练习。
【问题讨论】: