[英]Connection reset by peer when testing web server on different computers
我正在测试Python Web服务器。 使用本地主机作为服务器和客户端,它可以按预期工作,但是当我在其他计算机上进行测试时,
[Errno 54]对等方大约20%-80%的时间重置连接 ,具体取决于我一次生成的客户端线程数。 为什么?
代码段
服务器监听:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((self.interface, self.port))
sock.listen(5)
服务器永远循环,接受客户端连接,产生新线程:
while True:
(clientsock, (ip, port)) = self.sock.accept()
newthread = ClientThread(ip, port, clientsock)
newthread.start()
产生一堆与服务器连接的客户端线程,发送请求文件的消息,然后关闭连接
服务器准备就绪后会向客户端发送消息
self.socket.sendall(message.encode())
发送消息后,关闭连接的写入端:
self.socket.shutdown(socket.SHUT_WR)
客户端收到消息(此处发生错误)
def receive(self):
data_string = ''
bytes = self.sock.recv(self.bufsize)
while len(bytes) > 0:
bytes_str = bytes.decode('UTF-8')
data_string += bytes_str
bytes = self.sock.recv(self.bufsize)
return data_string
客户端线程收到消息后,关闭连接:
self.socket.close()
接收功能有错误。 改为:
def receive(self):
data_string = ''
while True:
bytes = self.sock.recv(self.bufsize)
bytes_str = bytes.decode('UTF-8')
data_string += bytes_str
if not bytes:
break
return data_string
服务器已关闭套接字时,旧的接收函数将尝试第二次调用recv
。 新的仅呼叫一次。
还不知道您可以将侦听套接字积压增加到5以上,因为Python文档通常说最大5是最大值,而在OS X上是5。将积压增加到128有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.