当客户端与服务端通过Tcp Socket进行通信时,如果客户端应用正常退出或异常退出,服务端都会在对应的连接上获取感知(如返回0、或抛出异常)。但是,如果客户端的网线被拔掉,那么,默认情况下,服务端需要在2个小时后才会感知客户端掉线。对于很多服务端应用程序来说,这么长的反应时间是不能忍受的。
   我们通常在应用层使用“心跳机制”来解决类似的问题,这是可行的。
   然而,在这里,我们可以使用Socket自己的心跳机制来解决这一问题。 System.Net.Sockets.Socket提供了IOControl()方法给我们来设置Sokect的心跳机制的相关参数。比如,我们设置KeepAlive的时间为20秒,检查间隔为2秒。可以这样做:

            int keepAlive = -1744830460; // SIO_KEEPALIVE_VALS
            byte[] inValue = new byte[] { 1, 0, 0, 0, 0x20, 0x4e, 0, 0, 0xd0, 0x07, 0, 0 }; //True, 20 秒, 2 秒
            sock.IOControl(keepAlive, inValue, null);

20秒(20000毫秒)的16进制表示是4e20,2秒(2000毫秒)的16进制表示是07d0,如此,你可以修改inValue参数为自己希望的值。
   在上述设置下,如果拨掉客户端网线,服务器Socket.Receive()会在20秒后抛出异常(注意,在这20秒服务端内无论是从该socket上接收消息还是发送消息都不会抛出异常!)。

Socket与拔掉网线相关推荐

  1. 拔掉网线后, 原本的 TCP 连接还存在吗?

    大家好,我是小林. 今天,聊一个有趣的问题:拔掉网线几秒,再插回去,原本的 TCP 连接还存在吗? 可能有的同学会说,网线都被拔掉了,那说明物理层被断开了,那在上层的传输层理应也会断开,所以原本的 T ...

  2. TCP协议:拔掉网线后, 原本的 TCP 连接还存在吗?

    问题描述 今天,聊一个有趣的问题:拔掉网线几秒,再插回去,原本的 TCP 连接还存在吗? 可能有人会说,网线都被拔掉了,那说明物理层被断开了,那在上层的运输层理应也会断开,所以原本的 TCP 连接就不 ...

  3. 原本的 TCP 连接,被拔掉网线后还存在吗?

    网线都被拔掉了,那说明物理层被断开了,那在上层的传输层理应也会断开,所以原本的 TCP 连接就不会存在的了.就好像, 我们拨打有线电话的时候,如果某一方的电话线被拔了,那么本次通话就彻底断了. 真的是 ...

  4. 客户端拔掉网线后,会直接影响 TCP 连接状态吗?

    大家好,我是小林. 今天,聊一个有趣的问题:拔掉网线几秒,再插回去,原本的 TCP 连接还存在吗? 可能有的同学会说,网线都被拔掉了,那说明物理层被断开了,那在上层的传输层理应也会断开,所以原本的 T ...

  5. 家用计算机在拔下网线的情况下,为什么只有拔掉网线才可以关掉电脑

    只有拔掉网线电脑才可以关机?最近有用户向我提起,他说他家的电脑拔掉网线才能关机,而他也尝试了多种方法,甚至在网上搜集了一些方法解决,但也没有解决问题,下面我来说下怎么解决只有拔掉网线电脑才可以关机的问 ...

  6. 网络编程释疑之:TCP连接拔掉网线后会发生什么

    背景:前些天团队在进行终端设备和服务器端长连接业务的测试时,发现了这么一个情况:在拔掉设备端的网线后,再插上网线,有时可以继续正常的进行长接连请求,而且用的还是拔掉网线之前的那个长连接.但是有时却不能 ...

  7. 黑客是否可以攻击被拔掉网线的电脑?

    拔掉网线只是有线断网而已,还有无线,应该是切断互联网是否还能攻击电脑,如果切断互联网,直接攻击是不可能的,但还有一些方式在理论上是可行的,比如通过蓝牙,扫描等方式,但这些对攻击距离有一定的要求,超过这 ...

  8. 20230214我华硕电脑拔掉网线,改为手机USB共享网络,上网,把centos搞得也能上网。

    20230214在以前桥接,,centos能通过华硕电脑,再通过网线路由器,能上网了,,,centos能上网的基础上,,,, 我华硕电脑拔掉网线,改为手机USB共享网络,上网,则华硕电脑的ip地址也变 ...

  9. 【网络】拔掉网线后,TCP连接还存在吗?

    文章目录 CS 之间存在数据传输 CS 之间不存在数据传输 其他场景 这个网络问题,需要分两个场景进行讨论.[CS,指客户端与服务器] CS 之间存在数据传输 具体场景:拔掉网线之前,服务端发出数据, ...

最新文章

  1. Activity的四种launchMode
  2. 算法------零钱兑换(Java版本)
  3. 快速安装及部署DRBD
  4. input按钮中的onclick事件
  5. 符号化Symbol(符号)体系(转载)
  6. VTK:vtkCaptionWidget用法实战
  7. u-boot 源码分析讲解
  8. 用Python自动生成NBA巨星生涯数据曲线
  9. python数据拟合固定参数_如何将数据拟合到非理想二极管方程(隐式非线性函数)并检索参数 - python...
  10. 【英语学习】【Level 07】U05 Best Destination L4 A perfect destination
  11. 查询oracle 表达小,oracle中sql语句小练习(使用连接查询)
  12. CentOS7安装了nginx后启动本机访问不到
  13. qt中将数据库中的数据显示
  14. 阿里13篇论文入选数据库顶会!PolarDB技术被认为引领数据库发展方向
  15. FW:星巴客装B指南
  16. 兄弟7360/7460其它设备两个USB Device上、Brother BHL2-Maintenance有个问号,扫描仪无法识别
  17. mysql pxc 原理_mysql PXC配置
  18. 阿里云部署.NET后端
  19. SQL SERVER 多字段不为空COALESCE用法
  20. 路由器有以下几种联网接口

热门文章

  1. Java Applet 授权命令
  2. php min命令,php min函数怎么用 - min
  3. 深入理解python.md_从python角度,理解进程,线程,协程.md-Go语言中文社区
  4. 设置xy轴名称_最强干货来了:Grasshopper运算器名称总结(上篇)
  5. OAuth2.0 授权码认证方式使用流程
  6. gis计算机信息技术,信息技术(IT)对GIS的影响
  7. react native loading动画_TypeScript for React (Native) 进阶
  8. mysql存储过程中in条件多个值,使用临时表解决
  9. mysql 查询姓王_MySQL查询语句练习题,测试足够用了
  10. Oracle中字符串转义问题总结