请对socket编程有丰富经验的朋友进来看一个boost.asio通信的问题 [问题点数:40分,结帖人facat]
- 收藏帖子
- 回复
结帖率 97.26%
0 2011-08-11 15:35:50 回复次数9
引用 ・ 举报 ・ 楼主
我用boost.asio库写了一个server和一个client。功能很简单,client把输入的字符发送出去,server就接收下来显示出来。我现在遇到一个很奇怪的问题,就是偶尔在server端会出现995错误。995错误的意思是
“由于线程退出或应用程序请求,已中止i/o操作”
由于是偶尔出现,所以我很难差到原因。而且是一连接收几十次不出错,然后下一次就突然出错。或者接连几次出错,然后又几十次不出错。
请大家帮我看看是不是有什么地方应该处理的我没处理。
附代码在下面,不过我估计不会有人看的,只希望大家根据自己的经验提出一些可能出现995错误的原因。
公用类:
C/C++ code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
server:
C/C++ code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
|
client:
C/C++ code?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
|
问题点数:40分
CSDN今日推荐
- ⋅ 如果你身边有程序员的朋友,请善待他们
- ⋅ 面试常见的问题(多线程同步 socket通信等)
- ⋅ jcommon源码jcommon源码
- ⋅ 经验的重要性
- ⋅ 需求分析的经验之谈
- ⋅ vc++ socket 编程
- ⋅ 永远不要跟一个白痴辩论,因为他会把你拉到与他一样的层次,然后用丰富的经验打败你。
- ⋅ 三种通信方式
- ⋅ 一共有n个人,给定m对好友关系,好友的好友也算一个朋友圈,问n个人中一共有几个朋友
- ⋅ 进程间通信之-socket编程原理
0 2011-08-11 19:01:34
引用 ・ 举报 ・ #1 得分:10
是不是几次连续发送的间隔太短了。试着几次发送之间,停顿一下
0 2011-08-11 19:29:51
引用 ・ 举报 ・ #2 得分:0
引用 1 楼 jjajun 的回复:
是不是几次连续发送的间隔太短了。试着几次发送之间,停顿一下
我一秒钟发送一次也是一样的。
0 2011-08-11 23:32:14
引用 ・ 举报 ・ #3 得分:10
看了你的程序,我也是菜鸟,我有几个疑问
你的服务器是异步的,acceptor之后的回调函数,你用了一个异步读,但是回调函数你又建立一个acceptor,没必要吧!程序用一个acceptor,然后每次建立一个socket即可!
0 2011-08-12 09:54:51
引用 ・ 举报 ・ #4 得分:10
我看了你的程序,先自我总结一下。我要向你学习,你写的很规整。
1、你先这样调试一下,你在客户端发送完数据。sleep一下。最好发送字节数相同,方便调试
2、最有可能的就是接收的服务端的接收字节的原因。我之前也遇到这个原因
如果有什么不懂的可以加入这个群150712146进行交流
0 2011-08-12 10:49:56
引用 ・ 举报 ・ #5 得分:10
在收到消息的地方,打印,那部断了
0 2011-08-12 11:48:54
引用 ・ 举报 ・ #6 得分:0
引用 3 楼 heqinlong 的回复:
看了你的程序,我也是菜鸟,我有几个疑问
你的服务器是异步的,acceptor之后的回调函数,你用了一个异步读,但是回调函数你又建立一个acceptor,没必要吧!程序用一个acceptor,然后每次建立一个socket即可!
如果如果只建立一个socket的话,每次就只能有一个client给server发送数据。为了保证可以同时有多个client连接到server上就要多开几个acceptor。我的程序中是保持有5个acceptor开着。
0 2011-08-13 14:01:15
引用 ・ 举报 ・ #7 得分:0
解决了,原来是shared_ptr<tcp_echo_connection>变量析构太早的原因。
让变量在asy_read_handle()执行完后析构就行了。
0 2011-08-13 14:02:17
引用 ・ 举报 ・ #8 得分:0
引用 4 楼 liugang_12026168 的回复:
我看了你的程序,先自我总结一下。我要向你学习,你写的很规整。
1、你先这样调试一下,你在客户端发送完数据。sleep一下。最好发送字节数相同,方便调试
2、最有可能的就是接收的服务端的接收字节的原因。我之前也遇到这个原因
如果有什么不懂的可以加入这个群150712146进行交流
写的规整到说不上,因为eclipse可以帮我自动排版的。
0 2012-03-28 17:28:47
引用 ・ 举报 ・ #9 得分:0
我也碰到过此问题,后来发现是变量生存周期结束导致的.
本帖子已过去太久远了,不再提供回复功能。
其他相关推荐
25岁社招进阿里,从电商到有赞新零售,他仅1年就打开了马云一直想做的新领域!
最近关于「新零售」的声音此起彼伏:阿里巨资收购高鑫零售,腾讯确认入股永辉超市…… 自2016年10月马云第一次提出了「新零售」概念之后,各巨头跑马圈地,线下成为了必争之地,新零售的蓝海才刚刚打开。 而李星,曾是阿里五年的「资深软件开发工程师」。现带领着有赞零售团队,探索在未知且市场极其广大的新零售,利用人工智能、大数据等技术,为数百万商家提供完整的全渠道解决方案,昌宁号、Brookstone、贝因
SAS考试经验,考sas的朋友来看看吧,对考试有帮助
1. 进程间通信 进程间通信主要包括管道, 系统IPC(包括消息队列,信号量,共享存储), SOCKET. 系统IPC的三种方式类同,都是使用了内核里的标识符来识别. 匿名管道( pipe ):匿名管道是一种半双工的通信方式,通常是在父子进程间使用。 命名管道 (named pipe) :命名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信
为啥90后都买了房,是因为这种新套路 电白民道投资 · 燨燚
网络重下往上可分为,物理层丶数据链路层丶网络层丶传输层丶会话层丶变现层和应用层。 IP协议对应于网络层,TCP协议对应于传输层,Hrttp协议对应于应用层。他们之间的关系,传输层TCP协议是基于网络层的IP协议,而应用层的HTTP协议是基于TCP协议的,Socket本身就不是一个协议,他只是一个接口。 http是基于tcp的超文本传输协议, http与socket之间的区别 TCP/I
TCP的socket编程中常见问题及注意事项
一、理解socket1、socket即为套接字,在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一的标识网络通讯中的一个进程,“IP地址+TCP或UDP端口号”就为socket。 2、在TCP协议中,建立连接的两个进程(客户端和服务器)各自有一个socket来标识,则这两个socket组成的socket pair就唯一标识一个连接。 3、socket本身就有“插座”的意思,因此用来形容
【小米校招笔试】假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。
2016年小米校招笔试第三题(西安站) 3 假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。 假如:n = 5,m = 3,r = {{1 , 2} , {2 , 3} , {4 , 5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1、2、3属于一个
本文介绍了一些socket编程的经验。让大家对socket编程有更进一步的了解。
一个退役操盘手肺腑之言,写给无数正在亏钱的散户 唯木家金融 · 燨燚
基于面向连接的socket编程 基于面向连接的socket编程就是基于TCP的socket编程。基于TCP的socket编程的服务器器端程序和客户端程序的流程如下: 服务器端程序 1、创建套接字(socket); 2、将套接字绑定到一个本地地址和端口上(bind); 3、将套接字设为监听模式,准备接受客户请求(listen); 4、等待客户请求到来;当请求到来后,接受连接请
http://blog.csdn.net/liuzhanchen1987/article/details/7452910 程序员必须让拥有依赖关系的进程集协调,这样才能达到进程的共同目标。可以使用两种技术来达到协调。第一种技术在具有通信依赖关系的两个进程间传递信息。这种技术称做进程间通信(interprocess communication)。第二种技术是同步,当进程间相互具有合作依赖时使用
扫码联系客服
官方公众号
QQ客服kefu@csdn.net客服论坛工作时间 8:00-22:00400-660-0108工作时间8:00-19:00
©2018 北京创新乐知信息技术有限公司版权所有