我正在尝试创建套接字客户端和服务器并在它们之间交换数据。我有下面的代码,但它是不可靠的。它在局域网上工作,但是一旦我通过互联网在旧电脑上测试它,我会得到错误,因为其中一方错误地将一块块视为块长度。我添加了sendall("1")来确认块已被接收,但它没有解决它。我也尝试将time.sleep增加到1秒,并将块长度降低到4096和512位。任何帮助表示赞赏。整个代码在这里,改变:https://github.com/hclivess/Bismuth/blob/master/node.py
服务器代码:
receive_left = self.request.recv(10)
while int(receive_left) > 0: # while there are chunks to receive
chunk_length = self.request.recv(10) # identify chunk length
app_log.info("Node: Received chunk length: " + str(chunk_length))
self.request.sendall("1") # acknowledge chunk length
time.sleep(0.1)
chunk = self.request.recv(int(chunk_length))
app_log.info("Node: Received chunk: " + chunk)
chunks = chunks + str(chunk)
receive_left = int(receive_left) - 1
app_log.info("Node: Combined chunks: " + chunks)客户代码:
chunks = 0
while int(receive_left) > 0:
chunk_length = len(data_split[chunks])
while len(str(chunk_length)) != 10:
chunk_length = "0" + str(chunk_length)
app_log.info("Node: chunk length to dispatch: " + str(chunk_length))
self.request.sendall(
chunk_length) # send how much they should receive
time.sleep(0.1)
self.request.recv(1) # receive chunk length acknowledgement
app_log.info("Node: chunk to dispatch: " + str(data_split[chunks])) # send chunk
self.request.sendall(data_split[chunks]) # send chunk
time.sleep(0.1)
receive_left = int(receive_left) - 1
chunks = chunks + 1