Python socket conn不会在网络更改时关闭

时间:2017-03-01 16:23:06

标签: python sockets

我有一台服务器连接到手机上的插座。我通过将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()

0 个答案:

没有答案