Socket测试服务器的连接问题

卡卡_苏米 2012-04-24 04:53:58
建立一个服务器端,用while循环accept客户端的请求,接收到客户端发送一个数据包给客户端,
然后我用客户端循环创建线程连接服务器,建立了20000个线程去连接,连接上以后并不断开连接,一直阻塞。
服务器只能接收到1200多个连接,其他的客户端都显示是10061的错误,意思是 主机拒绝连接,

这个意思是 我的服务端最多允许同时连接上1200多个客户端吗,

如果我让客户端connect之后 直接就退出程序 断开连接,服务端还是能接收到90%以上的连接。

求大神讲解~~
...全文
139 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤独小剑 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 5 楼 的回复:
引用楼主 的回复:
有可能是accept来不及,但是如果用一个客户端的SOCKET的fd来循环的话,结果是主机只能接收到一个连接,其余的连接都不会接收,因为同一个SOCKET的fd只能连接一次
[/Quote]同一个socket是只能连接一次,那就为每个线程创建一个socket再连接。
卡卡_苏米 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用楼主 的回复:
建立一个服务器端,用while循环accept客户端的请求,接收到客户端发送一个数据包给客户端,
然后我用客户端循环创建线程连接服务器,建立了20000个线程去连接,连接上以后并不断开连接,一直阻塞。
服务器只能接收到1200多个连接,其他的客户端都显示是10061的错误,意思是 主机拒绝连接,

这个意思是 我的服务端最多允许同时连接上1200多个客户端吗,

……
[/Quote]
有可能是accept来不及,但是如果用一个客户端的SOCKET的fd来循环的话,结果是主机只能接收到一个连接,其余的连接都不会接收,因为同一个SOCKET的fd只能连接一次
孤独小剑 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
建立一个服务器端,用while循环accept客户端的请求,接收到客户端发送一个数据包给客户端,
然后我用客户端循环创建线程连接服务器,建立了20000个线程去连接,连接上以后并不断开连接,一直阻塞。
服务器只能接收到1200多个连接,其他的客户端都显示是10061的错误,意思是 主机拒绝连接,

这个意思是 我的服务端最多允许同时连接上1200多个客户端吗,

如果我让客户端conn……
[/Quote]不知你是什么平台的
以linux为例,你两万个线程建立的话要设置线程栈大小不然栈空间不够用。
创建线程连接速度要比服务器accept的速度快,accept默认情况下一般允许十来个连接在队列中等待,所以可能是服务器来不及accept而导致拒绝连接。

个人意见:其实没必要创建20000个线程去连接,就用一个线程循环连接看建立多少个连接后会失败。
卡卡_苏米 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
线程要池化。
[/Quote]
赵老师 能给个测试的方法么?
卡卡_苏米 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
线程要池化。
[/Quote]
赵老师,关键是我客户端建立线程和服务端没啥关系吧~~
quwei197874 2012-04-24
  • 打赏
  • 举报
回复
这么多线程肯定没必要
赵4老师 2012-04-24
  • 打赏
  • 举报
回复
线程要池化。

64,654

社区成员

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

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