我的套接字有问题,它运行良好,但是当我关闭客户端/关闭客户端窗口时,服务器丢失了连接(服务器需要保持打开状态并等待其他连接)
while True:
rlist, wlist, xlist = select.select([server_socket]+open_client_sockets, open_client_sockets, [])
for current_socket in rlist:
if current_socket is server_socket:
(new_socket, address) = server_socket.accept()
open_client_sockets.append(new_socket)
print 'new member : ' + str(address)
else:
data = current_socket.recv(1024)
print data
if data == "":
open_client_sockets.remove(current_socket)
print 'Connection with client closed.'
else:
send_messages(data)
问题出在这一部分——
if data == "":
open_client_sockets.remove(current_socket)
print 'Connection with client closed.
这是错误 -
data = current_socket.recv(1024)
error: [Errno 10054] An existing connection was forcibly closed by the remote host
我在以前的套接字中没有收到此错误
当客户端优雅地关闭套接字时,例如client_socket.shutdown(socket.SHUT_WR)
服务器将接收所有数据,然后是下一个数据recv
调用将获得 0 字节。您已经为此案例编写了代码。
当客户端在没有正常关闭的情况下退出时,底层套接字实现将执行非正常终止,其中包括发送RESET
到服务器。在这种情况下,服务器会收到您所看到的异常。这意味着在套接字级别无法保证服务器收到其所有数据。
您应该更新您的客户,使其能够优雅地关闭,并决定您对非优雅退出的政策。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)