我需要实现一个简单的网络通信协议。
我使用Python 3.7。该程序在“本地主机”模式下工作。但是,在LAN上无法正常工作。我通过socket
启动socketserver
。
我设法建立连接,但是有时在recv
中,该程序只是无限地闲逛。它设法通过了几千字节,但随后随机阻止了所有内容。
阻止模式设置为true,所以我想知道是否没有发送数据,但另一端发送了信息。所以发生了什么事?信息没有到达吗?还是由于某种原因被删除了?
是否有可靠的方法来检查消息是否(由发件人)到达并在需要时重新发送数据?
def ReceiveRaw(self, msgLen):
msgOut = bytearray()
totalReceived = 0
while totalReceived < msgLen:
chunk = self.sock.recv(min(msgLen - totalReceived,2048)) #sometimes hangs here infinitely
if len(chunk) == 0:
raise RuntimeError("socket connection broken")
totalReceived+= len(chunk)
for b in chunk:
msgOut.append(b)
return msgOut