各位高手
  我在做一网络通讯程序的过程中,由于用户并发量非常大,当服务器同时连接数超过一定数量时(大约在500个左右),客户端不能连接服务器,报错:(
无法打开到主机的连接 在端口 6666 : 连接失败)。此时socket资源可能已被耗尽,有很多的tcp连接状态为TIME_WAIT, 待一段时间过后,socket资源已释放后,连接该服务器,还是报错(无法打开到主机的连接 在端口 6666 : 连接失败), 现在服务器已进入拒绝服务状态!
  请问高手,
  1、为何socket资源在释放后,还是不能连接?
  2、如何解释拒绝服务?
  
  在此多谢了!

解决方案 »

  1.   

    建议不要用自带的控件,直接用api,然后来一个客户创建线程,当客户端很多的时候,可以友情提示客户端“访问量过多,请您稍后重试”,这样可能更灵活点
      

  2.   

    多谢qiandeng(千灯), 
      你觉得Borland的VCL写得有问题吗?我已经实现了 友情提示客户端“访问量过多,请您稍后重试”, 但在提示之前,他已经连接上了,就是由于连接上了,导致连接数过多。
     关键的问题的,尽管友情提示,客户端还是在连接,就这样,服务down了。
      能有什么阻止出现拒绝服务吗?或是socket本身有拒绝服务的可能性?
      

  3.   

    连接数接近一个危险值的时候,你就提示后或不提示就主动把它断掉,
    出了异常的连接,在异常处理的时候,也要在服务端主动CLOSE一下.被动等到系统资源严重不足的时候再处理要困难得多.
      

  4.   

    To  halfdream(哈欠) 
      已经实现了!在连接数到一定数量后,已经做到了主动close, 但在close之前,C还是连上来了。而现在的问题是,服务器已拒绝服务, 如何消除拒绝服务,让他继续?
      

  5.   

    客户端当然是在CLOSE之前连上来的,
    我的意思是把已经建立的连接强制断掉.那个连接限制数至少得多留些余地,在某一瞬间超过这连接数没有关系的.