请问winsock编的通讯程序中,如果客户端是GPRS连接的终端设备,如果断开了,怎么检测到
我用的是两个winsock控件编的服务器端,一个是监听,一个是接收发送。如果客户端是GPRS连接的终端设备,如果断开了,好像WinSock_Close和WinSock_Error事件就无法获取了。请问这个怎么解决?大家有没有好的方法知道GPRS终端设备意外断网,服务器马上就能知道(不要发送数据来判断客户端)。 ????
这好像算是客户端非法断开。。。,不知怎么解决啊,急求???? --------------------编程问答-------------------- 可以通过winsock的状态知道的。 --------------------编程问答-------------------- 可以通过winsock控件的State属性获取状态,然后通过状态判断是否发送数据。 --------------------编程问答-------------------- 那个state状态检测不出非法断开的。。。我试过了这个检测是无效的。
因为gprs断开,是直接断电的,求还有什么方法??? --------------------编程问答-------------------- 一般tcp连接断开的时候都会有close事件,
如果没有的话就用通讯超时来判断,多少时间没收到数据就认作超时 --------------------编程问答-------------------- 有两种解决方案:
1. 服务器为每个客户端设置一个timer,在规定的时间内没有与客户端之间的数据交互,就认为出了问题.
2. 服务器主动向客户端发送数据,如果客户端已经关闭,服务器端将收到RESET报文段,你的程序会收到FD_CLOSE消息.
底层网络GPRS断开用第一种方法可以检测到;底层网络正常,但客户端关闭,用第一种,第二种都可以检测到.
请参考这里的程序,解压后找Finger程序,用的是异步socket.来自《WinSock网络编程经络》刚出版的,源码下载地址:http://download.csdn.net/detail/geoff08zhang/4571358 --------------------编程问答-------------------- 楼上正解 用 心跳 检测 定期发 喂 你在吗 在回话 回话就在 好久不回话就不在
补充:VB , 网络编程