我的客户端机强行关闭后,服务器怎么不响应OnClose呢,关闭客户端软件就会有响应,为什么? 当客户机关闭程序时,服务器会响应到OnClose事件,但是当客户机直接关闭机器时,服务器却并不响应OnClose事件,十分困惑,要怎样才能得到该响应呢,或者我在服务器上定时检测,该怎样呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接关硬件嘛?那是得不到的呀。要是选择shutdown,应该client能接受到消息的说。 当关闭客户端软件时,软件会发一个请求断连的TCP包,服务器收到该TCP包后,才会响应OnClose消息.但突然关机,对客户端软来讲是个突发事件,它根本来不及发送请求断连的TCP包,服务器端也就无法知道客户端已停止运行. 当关闭客户端软件时,软件会发一个请求断连的TCP包,服务器收到该TCP包后,才会响应OnClose消息.但突然关机,对客户端软来讲是个突发事件,它根本来不及发送请求断连的TCP包,服务器端也就无法知道客户端已停止运行. 你可以在服务器软件和客户软件之间定义一个协议,每隔一定的时间发送一个检测网络的数据包,以确认网络的正常,如过连续发送3个数据包都没收到,则认为网络断了. 一种方法如上所述是要求客户在规定时间内发一条指定格式的数据,让服务器知道它的存在,就像犯人在保释期间要定时回来报道一样,如果超过时间没有回来报到则判断犯人逃跑,这里也是一样,如果客户在规定时间内没有反应则可以认为客户外意断线。另一种方法我没有测试过,应该说如果对方断线的话,那服务器在调用SOCKET命令时应该会返回SOCKET_ERROR(应该是这样吧),再根据WSAGetLastError()应该就可以做相应的判断。 OnClose事件是软关机关闭电源是硬件关机,当然不行 Socket是不能检测到突然关机,网线断的情况的,如要检测有两种方法:1,服务端socket设置keepalive属性,用setsockopt。2,服务端不停和客户端交换信号,来检测线路状态。 单独使用keepalive属性好像不行!还是需要超时判断的!这个问题一直在讨论,到现在我还没有看到特别好的方法呢 :(-> 这样我的服务器在给他发信就导致了服务器程序崩溃竟然能崩溃!!!用什么操作系统? 不好意思,最近忙于考试,没想到此处还很热闹,非常感谢各位光顾,: superblackice sdf123321两位不知是谁抄谁的,不过无所谓好东西要大家共享嘛!给分了! [winsock] connect()函数处阻塞时间过长,如何解决? 求助:内存泄漏 100个人比赛 抽出8个人一组进行比赛 要使所有的人都在一组进行比赛 也就是说每个人和每个人都碰上面 需要多少组 请教大家一个问题 我想知道某个特定文件现在是否被使用,想通过测试fopen 如何使toolbar上的文字排在图标的右边(向IE那样)而不是在图标的下面 乱码问题 什么api函数能弹出一个要求输入对话框,如vb inputbox函数?? 希望和大家交个朋友! 我的VC++没有中文...... 设置文本框颜色(online) 菜鸟问题!(关于用ADO操作数据库的!)
你可以在服务器软件和客户软件之间定义一个协议,每隔一定的时间发送一个检测网络的数据包,以确认网络的正常,如过连续发送3个数据包都没收到,则认为网络断了.
关闭电源是硬件关机,当然不行
这个问题一直在讨论,到现在我还没有看到特别好的方法呢 :(-> 这样我的服务器在给他发信就导致了服务器程序崩溃
竟然能崩溃!!!用什么操作系统?