Winsock控件的客户端退出后,最后一条信息无法被服务器端捕获
编号:QA000145
建立日期: 1998年11月28日 最后修改日期:2001年3月25日
所属类别:
无名指:
Winsock 控件的应用:Client 端的form_Unload 事件中,winsock senddata 表示自己退出,可 sever 端没收到消息,client 端就退出了,造成 sever 端无法知道,只能靠检测 winsock 的 state 来处理,有没有更好的办法?
回答:
在client端程序结束前,做一定时间的循环,在循环内可以doevents,这样client端的winsock就有机会把信息送出去了。实际上,不仅是在退出程序时有这种情况,在很多情况下都会有, 也就是说 winsock的数据丢失了, 所以应该养成一个好习惯(我认为的好习惯), 每次senddata之后,都做一个小循环, 在循环内doevents, 这样可以给winsock时间来发送信息。
汤的意见:
可以利用以下特性实现:
每当winsock的一方执行Close方法时,只连接没问题,就能引发另一方的Close事件。具体可以这样作:
在Client端的winsock所在父窗体的Unload和Terminal事件中执行Close方法关闭连接,如此必然激发Server端winsock的Close事件,而Close事件所传进的Index参数正好可以定位是哪一个通道(WInsock实例)的对方发生“关闭”操作,在Close事件中你可以做任何要做的事情。
此问题由cAkk回答。
| |
|
|
| |
|
|