使用TClientSocket和TServerSocket组件开发。在使用disconnect方法断开连接后,使用netstat命令查看,Current Connection还没有减少,当Current Connection达到4000多的时候,客户端就会时不时地连不上服务器端了。是不是服务器端的资源用完了?请问在代码里面解决的话(不改变硬件设置),如何解决?

解决方案 »

  1.   

    用哪种函数会有效?在不能使用close方法关闭整个连接的情况下。
      

  2.   

    例如:有1000个不同的socket handle,我只想关闭其中的某几个。用close方法不就是把1000个全部都关掉了吗?
      

  3.   

    ”有1000个不同的socket handle“,一个Clientsocekt和ServerSocket的连接中还有handle吗?
    不会了,能解释是什么意思吗?
      

  4.   

    你是clientsocket close,不是serversocket clsoe吧?
    这样不影响其他clientsocket的连接的
      

  5.   

    能不能不用close方法呢?disconnect方法为什么不能释放资源?
      

  6.   

    虽说不影响其他clientsocket的连接,但是服务器的连接还是没有得到真正的释放。目前要解决的问题是:服务器的连接(其中有很多连接是已经在客户端使用close方法断开的了)越积越多,导致一定时间后,客户端只能断断续续地连接,无法正常连接
      

  7.   

    4000个连接,还用TServerSocket来开发本身就是绝对错误的选择,TServerSocket用的是基于消息通知的WSAAsyncSelect,根本就不应该用来开发服务器应用。这东西最多在开发P2P时用用,比如点对点的文件传输。
      

  8.   

    噢,多谢 ehom(?!) 。我是拿4000个连接来测试的。如果用TServerSocket,多少个连接会比较适合?目前已有的服务器已经使用了这个控件,没办法改其他控件啊~有没有一些折中的办法?
    如果不用TServerSocket,应该用哪个呢?
      

  9.   

    问题依然没有解决,希望哪位大侠帮帮忙~因为不能改组件,TServerSocket组件有没有释放部分连接的函数??
      

  10.   

    现在不是能不能改,而是必须改。首先要明白一点,不是它叫TServerSocket,就是用来开发Server的。这里的Client和Server是指发起和响应连接的两个不同终端。开发Server程序绝对不应该用WSAAsyncSelect模型的。难以想象网络通讯还要用一个隐藏窗口来接收消息响应I/O操作,这效率人稍微多点根本抗不住。开发Server程序,封装Socket是最基础的知识准备。如果在做相关开发,花3天时间把相关基础知识学习下不好吗?就算要对付一下,至少要用IdTcpServer这类,Delphi7带的TcpServer也能对付一下,不过要正常用起来一样需要了解一下相关基础知识。