2019年9月17日 / 673次阅读 / Last Modified 2020年6月6日
socket
用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
前一篇:reduce函数
后一篇:用hasattr或callable判断变量是否为函数
Ctrl+D 收藏本页
©Copyright 麦新杰 Since 2019 Python笔记