用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 --

python如何判断tcp异常断开_如何判断TCP连接已经中断?相关推荐

  1. java如何处理tcp异常断开_(转)TCP连接异常断开检测

    TCP是一种面向连接的协议,连接的建立和断开需要通过收发相应的分节来实现.某些时候,由于网络的故障或是一方主机的突然崩溃而另一方无法检测到,以致始终保持着不存在的连接.下面介绍一种方法来检测这种异常断 ...

  2. java如何处理tcp异常断开_针对TCP连接异常断开的分析

    我们知道,一个基于TCP/IP的客户端-服务器的程序中,正常情况下,我会是启动服务器使其在一个端口上监听请求,等待客户端的连接:通过TCP的三次握手,客户端能够通过socket建立一个到服务器的连接: ...

  3. 网络基础4(TCP三次握手,四次握手,TCP流量控制,TCP状态转换 , TCP异常断开,设置TCP属性,端口复用)

    TCP协议 TCP通信时序 下图是一次TCP通讯的时序图.TCP连接建立断开.包含大家熟知的三次握手和四次握手. TCP通讯时序 在这个例子中,首先客户端主动发起连接.发送请求,然后服务器端响应请求, ...

  4. linux的基础知识——TCP异常断开

    1.TCP异常断开 1.1 心跳检测机制 1.2 设置TCP属性

  5. python如何判断tcp异常断开_TCP socket如何判断连接断开

    http://blog.csdn.net/zzhongcy/article/details/21992123 SO_KEEPALIVE是系统底层的机制,用于系统维护每一个tcp连接的. 心跳线程属于应 ...

  6. java异常判断_Java异常退出条件的判断示例代码

    无论是功能性代码还是算法性代码,程序都是一系列流程的合集 既然是流程就分为:一般流程和异常流程: 一般流程保证了基本功能: 异常流程则是对程序稳定性的保证,不能因为一些非法输入,项目就挂了: 注意,布 ...

  7. tcp报文格式_面试必备TCP(一):三次握手

    TCP大家都知道是什么东西,这个协议的具体报文格式如下: 标志位 URG:指示报文中有紧急数据,应尽快传送(相当于高优先级的数据). PSH:为1表示是带有push标志的数据,指示接收方在接收到该报文 ...

  8. java tcp门禁_门禁控制器的TCP/IP协议功能

    原标题:门禁控制器的TCP/IP协议功能 门禁控制器的TCP/IP协议功能 Linux支持多种不同的网络协议,TCP/IP是Linux系统中最健壮.速度最快和最可靠的部分.TCP/IP协议包括了各个层 ...

  9. python程序如何执行死刑图片_如何判断对象已死

    已死的对象就是不可能被任何途径使用的对象,有以下几种方法判断一个对象是否已经死了: 引用计数 给对象添加一个引用计数器,每当有一个地方引用他,计算器就加 1:当引用失效时,计数器减 1:任何时刻计数器 ...

最新文章

  1. junit配合catubuter统计单元测试的代码覆盖率
  2. python画双折线图-Python Pandas 时间序列双轴折线图
  3. 卸载 流程_如何正确安装卸载mac软件
  4. java两个日期之间的日期_获取两个日期之间的日期形成一个集合
  5. 伯明顿分校计算机研究生专业,印第安纳大学伯明顿分校计算机科学硕士专业申请条件及申请材料...
  6. C/C++函数调用约定
  7. Active Directory的用户属性说明
  8. 精确的数据访问冲突_每个程序员都必须知道的8种通用数据结构
  9. nginx日志中$request_time时间异常问题排查
  10. python编程词典_Python 字典(Dictionary)操作详解
  11. 智慧医疗实现信息多跑人少跑
  12. Python爬虫编程常见问题解决方法
  13. mysql数据库管理与开发pdf_深入浅出mysql数据库开发、优化与管理维护.pdf
  14. mysql更新记录_如何查看 mysql 表中最近更新的记录
  15. 微信小程序——调查问卷案例
  16. 大学计算机基础教学存在的问题,浅谈大学计算机基础教学存在的问题及改进思路_优秀论文...
  17. 华为认证云服务工程师(HCIA-Cloud ServiceV3.0)-- 认证介绍
  18. 为什么没人比程序员更讨厌软件
  19. (邱维声)高等代数课程笔记:数域
  20. Congrats !

热门文章

  1. React 教程:快速上手指南
  2. 初步学习TypeScript
  3. 使用ISAPI_Rewrite做实用的重定向
  4. (转)SpringBoot系列—Redis使用
  5. 2017.4.24 js 中的iscroll
  6. Ubuntu14.04安装JDK
  7. 安卓模拟器BlueStacks 安装使用教程(图解)
  8. 力扣(LeetCode)刷题
  9. Uva1103 古代象形符号
  10. .NET多线程编程入门