日期:2014-05-17  浏览次数:21145 次

用TcpClient实现客户端和服务端通信,心跳包怎么弄呢?
用TcpClient实现客户端和服务端通信,心跳包怎么弄呢?
求各路大神指教!!!

------解决方案--------------------
在一些程序中,心跳包是代表了用户在线的状态,只要在线就定时发送心跳包,比如某些网游,QQ,等的程序。简单来说,心跳包相当于键值对的对比判断。比如,客户端登录时候,服务端分配给可以一个key,客户端每1分钟发送一次心跳包表示自己在线,发送时候服务端就靠这个key来识别是哪一个客户段并更新在服务端中维护的一个用户的数据空间,服务端自己每1分钟扫描这段数据空间,如果发现当前时间-上次心跳时间大于了1分钟,说明客户端掉线,那么将清理这块数据

这只是简单的应用举例
------解决方案--------------------

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 秒 

sct = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

sct.IOControl(keepAlive, inValue, null);    


通过IOControl设置是否需要发送心跳,以及心跳的频率
------解决方案--------------------
另外一个帖子我给你贴了socket怎么调IOControl,
然后你直接 TcpClient.Client.IOControl 就应该可以了。