HP-Socket在某种情况下不能接收消息
你好,我用HPSocket4C.dll+VC6.0做了一个Socket服务端的应用。但我们的网络环境很不稳定,会在某些时间段出现严重丢包的情况,这时候,Socket服务端就会接收不到消息了,客户端也无法重新连接。网络正常的情况下,这种情况是不会发生的。请问这种情况可以怎么去解决?我用的是最新的版本的动态库3.2.1.0,谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
怪兽大哥,[198,OnError] -> OP:4,CODE:10054,有回调OnError事件,这是错误信息。报这个之后就接收不到socket信息了,调HP_Server_Stop()函数会造成cpu 99%卡死。难道服务端OnError之后就只能重启客户端了??
回复
OnError 与 OnClose 都表明连接已关闭,OnClose怎么处理,OnError就怎么处理。。。参考 Demo
另外,不能在任何 OnXxx()事件线程中调用HP_Server_Stop(),因为HP_Server_Stop()会循环等待所有IOCP工作结束,但这个线程永远不结束,导致死循环。
你是不是没有处理OnError事件?发生OnError就说明连接关闭了!
参考这里:http://www.oschina.net/question/1439718_141207
- - 小弟用VC6.0,编绎的时候缺很多头文件,我是看着delphi调用动态库的Demo很方便,照着写的。。。。
http://www.oschina.net/question/1439718_141207
另外,c++程序最好用hpsocket.dll,省心省力。
怪兽大哥你好,根据测试,关闭心跳检测还是解决不了问题。我这大约有25个客户端,测试时间是10小时,每条信息的发送时间大约是200ms。socket信息处里是在OnReceive的回调函数里完成的,服务端接收不到信息后,调用HP_Server_Stop()函数没有反应,结束进程后再打开就正常了。不知这个是我的程序问题还是你们动态库的问题呢?
关闭心跳检测或者延长心跳检测时间