怎么判断对方已经关掉套接字? 本帖最后由 VisualEleven 于 2012-08-15 20:35:01 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 能不能让客户端设个TIMER,定时发送消息给服务器,关闭的时候,就发送特殊消息。 你肯定写有接收该客户端的接口吧(即:::recv(socket1))。该函数的返回值就能够判断对方是否关闭。我记得是返回0时,表示对方是通过closesocket(socket1)的方式关闭了该套接字。如果返回-1的话,就需要使用getlasterror()来抓取到底是什么原因导致接收失败了。大体上就可以通过if(0 >= ::recv(socket1))来判断通信是否关闭了。 我想问问,能用FD_Close()这个事件吗?但是怎么知道是哪个套接字呢? send返回0表示对方关闭了或者采用心跳包的方式,定时判断。 不同的socket模型有不同的方法,阻塞的模式就使用recv与send的返回值判断,如果是0就是网络出错,socket不能再使用,如果是异步模型查看每种模型的方法,例如完成端口就看GetQueuedCompletionStatus中的lpNumberOfBytesTransferred中的参数返回值,如果是0就是网络出错,socket不能再使用,至于是哪个socket每种模型响应时都会带有socket句柄做参数的,每次查询时那就是对应的socket句柄 长连接:心跳包是最科学的方法,一般都是自定义协议,在一段时间内发送一小端消息过去。一般服务器对每个连接都有个定时器,比如60秒之内收不到消息,服务器自动判定已断线,做相关处理短连接:这个判断就要重新Connect了,不需要心跳包 Form程序能不能在运行时,传入参数 我做了一个IE插件,在“查看”-“浏览器栏”下通过菜单调出,我想设置一个快捷键调出,不知如何办? AVI文件的调色板怎么写入和更改? Recordset 的RecordCount属性怎么不管用啊? 高手帮忙啊 CString Append 的奇怪问题 如何实现半透明窗口 用vc怎么对usb口进行操作??? VS2008 多工程编译的问题求助 ASCII转换成16进制的程序 要想在98中实现NT一样的登陆机制,各位有什么意见? MFC文件保存和读取的问题。 关于完成端口的,大家帮忙看一下
大体上就可以通过if(0 >= ::recv(socket1))来判断通信是否关闭了。
或者采用心跳包的方式,定时判断。
一般服务器对每个连接都有个定时器,比如60秒之内收不到消息,服务器自动判定已断线,做相关处理
短连接:这个判断就要重新Connect了,不需要心跳包