如何判断TCP连接已经中断?

2019年9月17日 / 10次阅读 / Last Modified 2019年9月18日

用Python写网络应用是很常见的,因此一个常见的问题就是,如何在Python代码中判断TCP链接已经中断?

TCP有连接,如果通讯的某一方中断的连接,另外一方在socket层面如何感知?这个问题我也是经过一番挣扎才搞清楚的。

对于同步通信的TCP连接,即调用recv函数的时候是阻塞的,如果recv返回0长度的byte stream,就可以判断对方已经中断了此TCP连接了。而如果是异步通信,send函数发送失败,也说明TCP连接已经中断。

下面给出一段我自己写的代码,TCP同步通信,除了判断连接是否中断,还处理了各种可能的异常:

    try:
        gSock.send(bmsg)
        recv = gSock.recv(RECV_BUFFER)
    except socket.timeout:
        msgbox.showwarning('Warning', '等待TCP消息回应超时')
        return False
    except (OSError,BrokenPipeError):
        msgbox.showerror('Error', 'TCP连接已断开')
        stop_conn()
        return False
    except AttributeError:
        msgbox.showerror('Error', 'TCP未连接')
        return False
    except Exception as e:
        msgbox.showerror('Error', repr(e))
        return False
    else:
        if len(recv) == 0:
            msgbox.showerror('Error', 'TCP服务器已断开连接')
            stop_conn()
            return False

这不是一段完整的代码,不能直接运行,只是示意。gSock是一个TCP连接的socket对象,msgbox可以弹出对话框。稍作修改,这段代码就可以随处使用。

-- EOF --

本文链接:https://www.pynote.net/archives/1154

相关文章

    留言区

    电子邮件地址不会被公开。 必填项已用*标注


    前一篇:
    后一篇:

    More


    ©Copyright 麦新杰 Since 2019 Python笔记

    go to top