gpt4 book ai didi

Python SocketServer 收不到所有数据

转载 作者:太空宇宙 更新时间:2023-11-03 11:27:46 24 4
gpt4 key购买 nike

我正在尝试实现 SocketServer 以从移动应用程序接收文件:

  1. 移动应用程序发送文件大小。
  2. 移动应用程序发送文件。

正确接收文件大小。在应用程序中发送所有数据。但是,SocketServer无法接收到所有的数据,会卡住。

import SocketServer
import struct

class MyTCPHandler(SocketServer.BaseRequestHandler):

def handle(self):
size = self.readLong()
print 'Payload size', size

bytes = self.readExact(size)
print 'Read bytes'

self.request.sendall('Hurray!')

def readLong(self):
return long(struct.unpack('>q', self.readExact(8))[0])

def readExact(self, num):
buf = bytearray()
remaining = num
while remaining > 0:
chunk = self.request.recv(remaining)
if not chunk:
raise EOFError('Could not receive all expected data!')
buf.extend(chunk)
remaining -= len(chunk)
return buf

if __name__ == "__main__":
HOST, PORT = "localhost", 9999
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever()

已解决正如 @6502 所建议的那样,问题出在我使用缓冲输出但从未刷新的移动应用程序中。

最佳答案

代码似乎是正确的。

您的 recv 调用是否返回空字符串?如果发生这种情况,则发生错误。

您还在移动端等待确认吗?如果您不这样做而只是退出移动端,则可能会过早关闭端点而不发送所有数据。

另一种可能性是,如果发送方没有正确处理 send 也可能返回小于指定大小的值(当发送缓冲区已满时会发生这种情况)。

关于Python SocketServer 收不到所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30546334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com