是这样的:
我用c#编写了服务器,同事用C写的客户端主要向服务器发送数据,用TCP连接,为了检测意外断开的网络,加了心跳包。
客户端每3分钟发个心跳包,若没收到服务器回复就隔40秒发,超过三次便认定与服务器断开连接。但是客户端会经常没收到服务器的回复,然后断开再重连。服务器那边处理客户端发来的数据和心跳包都是同一个函数。而且我另外用c#写的另外一个客户端主要接收服务器的数据,总共就出现两次心跳包没回复而断开连接。
各位有遇到这样的情况吗?怎么处理啊?
我用c#编写了服务器,同事用C写的客户端主要向服务器发送数据,用TCP连接,为了检测意外断开的网络,加了心跳包。
客户端每3分钟发个心跳包,若没收到服务器回复就隔40秒发,超过三次便认定与服务器断开连接。但是客户端会经常没收到服务器的回复,然后断开再重连。服务器那边处理客户端发来的数据和心跳包都是同一个函数。而且我另外用c#写的另外一个客户端主要接收服务器的数据,总共就出现两次心跳包没回复而断开连接。
各位有遇到这样的情况吗?怎么处理啊?
Socket.IOControl(IOControlCode.KeepAliveValues, inValue, null);连接后执行一下上面的,就会在五秒之后每五秒发一次心跳包。0x1388是5000毫秒,可以自己设置。C中也有相应的调用方式。
这样设置之后,当心跳包超时(印象中默认应该是30秒)未接到,会在receive中引发异常,根据异常就可以断开连接了。