当客户端与服务端通过Tcp Socket进行通信时,如果客户端应用正常退出或异常退出,服务端都会在对应的连接上获取感知(如返回0、或抛出异常)。但是,如果客户端的网线被拔掉,那么,默认情况下,服务端需要在2个小时后才会感知客户端掉线。对于很多服务端应用程序来说,这么长的反应时间是不能忍受的。
我们通常在应用层使用“心跳机制”来解决类似的问题,这是可行的。
然而,在这里,我们可以使用Socket自己的心跳机制来解决这一问题。 System.Net.Sockets.Socket提供了IOControl()方法给我们来设置Sokect的心跳机制的相关参数。比如,我们设置KeepAlive的时间为20秒,检查间隔为2秒。可以这样做:
intkeepAlive=-1744830460;//SIO_KEEPALIVE_VALS
byte[]inValue=newbyte[]{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长连接原理 Socket是网络编程的基础,它提供了进程间通信的能力,包括在同一台机器上的...
"TCP 连接在拔掉网线后的行为" TCP 连接在拔掉网线后,是否还存在,这是一个常见的问题。许多人认为,拔掉网线会影响传输层,因此 TCP 连接也会断开。然而,事实并非如此。TCP 连接在 Linux 内核中是一个名为 ...
"Socket与拔掉网线.txt"可能是一份测试案例,模拟网络突然中断的情况,以检验心跳机制在异常情况下的表现。通过拔掉网线模拟网络断开,可以测试心跳检测是否能在短时间内识别出问题并采取相应的恢复措施。 总的来说...
4. 注意:客户端的发送数据线程中的发送时间间隔决定了你拔掉网线后多久插上网线进行自动恢复,服务端中的 设置超时时间位置设置为120秒,目的是为了在拔掉网线后120秒内不会导致socket被操作【可自行代码中修改】。
"检测网线插拔程序" 本资源是关于检测网线插拔程序的实现,主要用于检测微软系统下的网线是否插上或拔下。下面是对该程序的详细知识点解释: 1. 头文件testlink.h:该文件是应用程序的主头文件,用于包含项目的...
C# socket通信(免积分下载),本项目有三个部分:1、客户端(winform);2、服务端(winform);3、socket功能类库模块(其他项目也可以引用),socket类库模块功能齐全,只需调用其中方法即可,复用性较强,代码...
这个现象通常与内存管理、异步通信机制以及错误处理不当有关。在深入探讨这个问题之前,我们先了解一下QTcpSocket的基本概念。 QTcpSocket是Qt网络模块的一部分,它提供了一种方便的方式来实现TCP(传输控制协议)...
在"lwipusb"标签中提到的"USB"可能是用于STM32F407与PC或其他设备进行数据交换的一种方式。STM32F407支持USB主机和设备模式,可以作为USB设备连接到电脑进行固件升级、数据传输等操作,也可以作为USB主机控制其他USB...
C#内置了System.Net命名空间,其中包含了各种网络通信类,如HttpWebRequest、WebClient和Socket等。在这个项目中,我们可以利用NetworkInterface类来获取网络接口信息,判断网络是否可用。NetworkInterface....
Delphi之TClientSocket和TServerSocket进行TCP长连接通讯,使用KeepALive自动发送心跳包检测断网,并实现断线重连,经测试可以及时检测到拔掉网线断网情况,具有较高的参考价值
实验过程中,拔掉网线会中断TCP和UDP的数据传输。对于TCP,由于其具有连接性和可靠性,一旦网络中断,连接会丢失,且数据无法正常传输。而对于UDP,由于其无连接特性,即使网络断开,数据包可能丢失,但不会像TCP...
TCP存活可以通过修改系统设置或者在tcp应用代码里面设置,本demo的是在tcp应用里面设置。原理是:对于一个已经建立的tcp连接。...运行本测试代码,然后拔掉主从之间的网线,主和从都可以检测到tcp断开。
如果在运行过程中拔掉目标主机的网线,将导致超时状态,从而显示网络连接问题。 实验结果分析表明,该PING程序能够有效地检测网络连通性,提供路由跟踪和自定义参数等功能,为网络故障排查和性能监测提供了实用工具...
在TCP通信中,如果服务器在设定的时间内没有收到客户端的心跳包,就会认为客户端已经断开,并将Socket状态机切换到SOCKET_CLOSED,然后重新打开Socket以监听新的客户端连接。 Keepalive有两种主要类型:客户端到...