SOCket 通信问题

detrisun 2011-04-20 10:36:19
做法:通过一个客户端同时监控多个服务端。
客户端主动连接每一个服务端,成功后,创建接收线程接收服务端的数据,并放入QueueUserwork 线池中。
但是当连接成功30左右个服务端后,创建的接收线程就收不到服务端的数据了,报错:10057、10060。
原因何在:?
...全文
138 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dangde_1 2011-04-20
  • 打赏
  • 举报
回复
你可以查一查10057是什么错误, 10057:由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。
再者,你的 connect 是用的异步还是同步的?如果是同步的 connect ,你完全可能等到这个函数返回,如果已经设置成异步的,这个你就要多考虑一些问题, select write 事件,然后用 getsockopt 来判断一下有没有错误发生。 如果确实是连接上了,就不该有这两个错误发生。
detrisun 2011-04-20
  • 打赏
  • 举报
回复
内存没有异常。
程序会在收到服务端的信息后,退出线程。
然后在另一个线程中遍历连接所有的服务端,完毕后再重新遍历。
只能成功Recv30个左右的服务端信息,非常奇怪啊!!!!!!!!!!!!
justrun2005 2011-04-20
  • 打赏
  • 举报
回复
可能是占用的内存已经达到2G限制了。
detrisun 2011-04-20
  • 打赏
  • 举报
回复
conn 到Recv 约 120 秒以内
detrisun 2011-04-20
  • 打赏
  • 举报
回复
是的。无论是从服务端列表的前端开始还是后面开始都是不到30 个。
因为是把recv放在QueueUserworkItem中执行的,所以从conn到recv 的这段时间不好把握
magicyang87 2011-04-20
  • 打赏
  • 举报
回复
感觉应该是你的conn线程请求发完 等你的recv线程到那个时创建的套接字已经自己关闭了吧 是每次都到30个就不能再接收了?从conn到recv大约隔多长时间?
赵4老师 2011-04-20
  • 打赏
  • 举报
回复
应该是33个线程,和全局变量int socket[33],每个线程使用自己对应的那个socket[i]连接各自的服务器,recv,send,线程只有在进程退出时随之退出,否则不要退出。
detrisun 2011-04-20
  • 打赏
  • 举报
回复
谢谢各位的回答,感激不尽。麻烦能否帮忙再分析一下:
实际情况是这样的:有33台服务端,一个客户端。客户端需要实时监控每个服务端的状态。
采用的思想:一个conn线程:用来循环连接每一台服务端。 一个Recv 线程池:接收服务端的状态。
线程池中的线程函数:接收到一台服务端发送的5个状态包后,退出线程。
但是当Recv成功了30 台服务端后,Recv不到其他服务端的信息。但是那些服务端确实是连接好了,并已经开始不断的发送状态了。但客户端的QueueUserWork线程池中的Recv线程函数就是接收不到。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧