您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> 请问一下大家 boostasio TCP异步通讯 如何能第一时间检测客户端关闭啊

请问一下大家 boostasio TCP异步通讯 如何能第一时间检测客户端关闭啊

来源:网络整理     时间:2016/8/29 4:12:37     关键词:

关于网友提出的“ 请问一下大家 boostasio TCP异步通讯 如何能第一时间检测客户端关闭啊”问题疑问,本网通过在网上对“ 请问一下大家 boostasio TCP异步通讯 如何能第一时间检测客户端关闭啊”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 请问一下大家 boostasio TCP异步通讯 如何能第一时间检测客户端关闭啊
描述:

看这个库很强大,想做个异步的TCP服务器和客户端,要能支持好多好多客户端的。但是当测试的时候发现,用ctrl+c或者让客户端自己关闭,那么服务器端久久不能检测到,知道异步写的第3次响应才检测到。后来在网上找说只用run()中没有注册事件了才会关闭对客户端的套接字,这里我用智能指针封装了套接字,其实就是用boost应用大全什么的那本书里举的例子。
小弟想问各位,难道boost的异步通讯就没有想Onclose那样的函数能检测到客户端关闭吗,非要等到所有事情都处理完再关闭,那如果我有个1小时发一次的写事件,如果在第一分钟客户端就关闭了,难道我要等到1小时之后才能关闭它吗?小弟知识量有限,请大家跟我说说,探讨一下,多多增加知识。


解决方案1:

CLOSE_WAIT是正常的,你的服务器收到了客户端的FIN,你关闭客户端的套接字就可以了。


 sock->shutdown( boost::asio::ip::tcp::socket::shutdown_both, ec );
 sock->close( ec );
解决方案2:

我没改你的代码,拷贝到vs上编译,在windows上执行,客户端用telnet模拟的,没发现有什么问题。
不用怀疑asio,绝对是一个好用的网络库,出了问题,99%是你代码写错了。
qq:176930292

解决方案3:

给你推荐一篇asio的step by stepjrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播,全部看完之后,再结合官方手册,肯定可以用好。
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio?pg=1

解决方案4:

lz其实你的代码并没有什么逻辑上的大问题。
我在windows上测试过了,没有问题,关掉客户端的telnet窗口,服务器是可以相应到得。
但是,你最好的ioservice.run放在放在另外一个线程里,而且不要用wait,要用asyncwait

解决方案5:

deadline_timer t(ios, posix_time::seconds(5));
t.wait();
同步等待五秒?

解决方案6:

 请问一下大家 boostasio TCP异步通讯 如何能第一时间检测客户端关闭啊
boost 不会直接给你提供 OnClose OnClose需要你自己封装. 从你的描述看 应该是你使用上的问题. 


以上介绍了“ 请问一下大家 boostasio TCP异步通讯 如何能第一时间检测客户端关闭啊”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3650538.html

相关图片

相关文章