当前位置:  技术问答>linux和unix

一个socket服务器端,当客户端数目多时总是连接不上!

    来源: 互联网  发布时间:2015-08-02

    本文导语:  问题描述在这里,请大侠赐教: http://community.csdn.net/Expert/topic/3402/3402645.xml?temp=.7895014 | 什么操作系统, 有些操作系统有最大数连接数目限制 | 那应该是程序本身的问题了. ...

问题描述在这里,请大侠赐教:
http://community.csdn.net/Expert/topic/3402/3402645.xml?temp=.7895014

|
什么操作系统, 有些操作系统有最大数连接数目限制

|
那应该是程序本身的问题了.

|
server的问题。你可以加些打印,看server在什么地方出错关闭socket的。

|
看你在监听的时候设置了最大的监听等待队列数,不过在Linux中的默认值为2401,是否超过了这个数?

还有你监听的数目越多,所需要的系统资源也会越多,你的系统资源能够监听很多连接吗?

|
开大listen的backlog数,它是accept和下一次accept之间挂起的用户请求数目。如果超过这个数目的连接请求就会被拒绝,就是这样的错误信息。

|
同意楼上,可能是server程序accept处理不过来,很多在等待状态。

|
listen(x,x2)x2开大点试试

|
同时打开的文件句柄数有限制的。ulimit -a可以看到。

|
如果你的客户端连接不上是connect出错,看一下errno.如果是因为没有回包,要看你的server处理到哪一步。程序写得不好。Nonblock socket的很多读写没有错误处理,错误消息很少。结构不好,象个大杂烩。

|
nofiles(descriptors) 1024!

|
嗯,最多1024个打开文件。另外,如果用的是线程处理的话,还受到堆栈内存的限制。

|
还是从accept报错的地方把错误的errno,以及perror出来看看吧。

|
tcpdump 查查网络包的状态

|
一个进程同时打开的文件句柄时有限制的,你可以看看这个超过了没

|
从你上面列出的系统限制信息来看,在打开的文件描述字和堆栈方面都有限制,其实,每个socket也是一个文件描述字的.

客户端打印消息:: Connection reset by peer


从这里来看是服务器端出问题了.

|
不好意思,没写完不小心按提交了。
续上

在linux下,对于每个socket,内核维护2个队列:
1:未完成的连接队列
   客户端发送的SYN分节已到达服务器端,服务器正在等待完成相应的TCP三路握手过程。内核将这样的客户放置在未完成连接的队列中,这些socket处于SYN_RCVD状态。
2:已完成的连接队列
   每个已完成三路握手的客户存放在此队列中,这些socket处于ESTALISHED状态。
accept每次从已完成的连接队列中取出一个客户。如果此队列为空,那么服务器端的进程就进入睡眠状态(假设socket为缺省的阻塞方式)

当一个客户的SYN到达时,若这两个队列都是满的,TCP就会忽略这个SYN,客户端就会连接不上。

在比较繁忙的服务器端,应该采用多线程,主线程监听,每来一个客户端,开一个线程去处理该客户端。

listen()
while(true)
{
   accept()
   pthread_create()
}
而且,while循环中的代码尽量减少,执行越快越好。

|
TCP/IP工作原理
在linux下,对于每个socket,内核维护2个队列:
1:未完成连接的队列

    
 
 

您可能感兴趣的文章:

  • php实现socket实现客户端和服务端数据通信源代码
  • socket客户端程序的问题
  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • 客户端 socket 断开后 服务器端系统如何处理?
  • Linux c socket编程:简单的客户端(client)和服务端(server)实现
  • 已和客户端连接建立的socket在客户端CTRL-C后怎么在服务器端捕捉这个错误?
  • 服务器与客户端建立socket连接,如何获得端口号.谢谢
  • python实现socket客户端和服务端简单示例
  • 客户端是linux通过socket编程实现服务器端win平台接收?
  • linux客户端程序能否和windows端的服务器程序进行socket通信?
  • socket编程中客户端绑定端口的问题,请兄弟们指点一下
  • 请问关于socket客户端因事件启动新线程的问题.高手请进
  • mysql iis7站长之家
  • 请问linux写socket的客户端如何实现WSAAsyncSelect
  • socket编程,服务器会用bind()绑定端口,而客户端不用绑定端口就可以调用connect()。那么客户端的端口时系统自己分配的么?是何时绑定的?
  • Socket客户端为什么Thread没有效果?
  • socket客户端connect服务端后,如何断开连接?
  • 请教关于socket通讯中客户端接收服务端信息的问题
  • socket 通讯问题!客户端获取服务端数据问题,死活都是0!
  • 关于linux socket 客户端编程
  • 请问,C语言socket编程中,客户端如何得到自己的IP?不要0.0.0.0
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 两个 Socket 互相通信,其中一个如何判断另一个 Socket 是否已经意外断开了连接?
  • socket 断开连接如何再恢复连接
  • 什么是socket的长连接,以及如何实现长连接,长连接和短连接有什么区别?
  • kjava能不能通过socket连接服务器
  • socket 连接问题(不要见笑)
  • 如何跨网段进行socket连接
  • socket连接建立,收不到告警的情况?netstat结果如下
  • ftp连接出现socket错误=#10054的解决方法
  • 如何清楚linux系统中以退出程序的socket连接?
  • Socket连接的时间不能控制??请帮小妹
  • http连接,服务器端关闭socket
  • 请问javaBean能不能进行非本机的socket连接
  • 200分求问j2me里如何建立socket连接?
  • Linux下的Socket通信如何断开连接的端口从而实现重复使用该端口
  • 一个进程打开的socket长连接能否达到10000个
  • 关于LINUX SOCKET连接CPU占用问题
  • SOCKET调用close断开连接的时候回主动发FIN ACK包吗?
  • SOCKET 长连接
  • C下判断socket连接状态,怎么实现
  • Linux与Windows的Socket连接问题 有分!!!
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3