我有一台服务器连接到手机上的插座。我通过将socket.recv()命令分配给变量并检查其长度来检查连接是否打开。如果其长度为0,则关闭连接。此外,如果我收到除socket.timeout异常以外的任何异常,我也会关闭套接字(下面的简短示例)。除了一种情况外,这种方法很有效。当作为客户端的电话从wifi变为GSM网络或反之亦然时,数据停止发送和接收。但是,手机服务器上的套接字不会抛出异常,也不会给出0长度的字符串来指示套接字已完成写入。他们只是继续,好像什么也没发生过。
套接字持续存在,直到我手动关闭它们。现在我正在接收数据超时,即如果我在2分钟或更长时间内没有收到数据重置连接。但是,我想知道是否有另一种方法来捕捉或防止这种情况发生。即使网络发生变化,有没有办法保留套接字?
conn,addr=s.accept()
while True:
try:
message=conn.recv(1024)
while len(message) > 0:
#do something here
message=conn.recv(1024)
except socket.timeout:
pass
except:
conn.close()