客户端与服务端建立tcp连接后,当服务端退出后,客户端调用什么函数可以直接知道? 如题,最好不要再次发送连接请求等类似方法 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 服务器关闭时,会有Close的事件发生 如果服务器端是正常的关闭socket退出,那么客户端马上就可以知道,你可以调用recv()去接收,马上就会返回一个错误码,告诉你远程主机已经关闭如果是非正常退出,没有调用closesocket(),那么客户端的socket就会存活一段时间,因为tcp有三次握手,它会定时的监测相连的socket是否还存活,它会定时的给对方发送ack包的,如果超过一定时间没有回答,就认为对方死掉了,所以,这种情况下你是没有办法立马知道对方异常的,中间要有个几秒的延迟, 没有专门函数当服务器closesocket客户端recv()长度为 0 由此来判断 如fndxm所说,如果是正常关闭,客户端能够捕获到相应的网络事件。 如果服务器端非正常退出(比如程序崩溃、死机、断电等),没有执行shutdown、closesocket,那么客户端可能永远(注意是永远!)不会知道!因为没有机会完成断开连接的4次(不是3次)握手(握手只是建立连接和断开连接时发生的,不是用于监测连接是否存活用的)因此,在设计协议时,大多要有检测机制,要么利用keepalive,要么自己发送心跳包。 TCP在连接的时候有三次握手机会。连接时:连接->ACK->ACK连接成功断开连接的时候也时这样的,在收到了ACK包后客户机断开连接,叫做完美释放。很多的关于TCP的文章都有此类的说明,建议去看看。 typedef 返回指针的函数怎么定义 html中调用组件 如何退出程序啊?? 关于文字输出的问题? 请问要将输出的文本设置为斜体、粗体,该如何实现? 请教:连接错误,fatal error C1001: INTERNAL COMPILER ERROR 请问:installshield中如何调用外部程序? ATL 没选择支持MFC, COleDateTime用不了, 怎样处理DATE? win sp2 下如何隐藏进程 为什么我的DirectX程序在win2000下变慢了很多? 我想写一个邮件服务器,请大家给我讲讲思路和好的建议,应注意的问题之类的,谢谢~ 关于在视图中获得当前坐标点的问题
如果是非正常退出,没有调用closesocket(),那么客户端的socket就会存活一段时间,因为tcp有三次握手,它会定时的监测相连的socket是否还存活,它会定时的给对方发送ack包的,如果超过一定时间没有回答,就认为对方死掉了,所以,这种情况下你是没有办法立马知道对方异常的,中间要有个几秒的延迟,
当服务器closesocket
客户端recv()长度为 0 由此来判断
连接时:连接->ACK->ACK连接成功
断开连接的时候也时这样的,在收到了ACK包后客户机断开连接,叫做完美释放。
很多的关于TCP的文章都有此类的说明,建议去看看。