我用TServerSocket写一个SOCKET服务器程序,客户的连接有点像浏览器,连上来取走数据就关闭。我发现有这样一个问题,当我客户端连接接近4000次的时候,服务器没有办法再接收新的连接。调试发现以前的客户端连接socket没有正常释放。在OnClientDisConnect事件处理函数中调用Socket->Close()或者Socket->Free() 或者delete Socket都不可行,报内存错误, WHY??? 有解决办法吗???希望得到各位高手的指点。

解决方案 »

  1.   

    客户端已经用    ClientSocket1->Close();释放了的!
      

  2.   

    //删除之前先关闭一个连接;
          form1.ServerSocket1.Socket.Connections[int_index].Close;
      

  3.   

    只要一用form1.ServerSocket1.Socket.Connections[int_index].Close;
    这个报内存错误,说操作一个非法的socket!
      

  4.   

    会出现“stack overflow”错误提示!
      

  5.   

    你可以试一下,把客户端绑定的本地端口localport设置为0,或不绑定本地端口。
      

  6.   

    客户端绑定的本地端口localport,怎么绑定啊,我不知道,能教教我吗?
      

  7.   

    你不要修改clientsocket的localport值,使其为初始值0就可以。要绑定端口值,直接设置
    localport值就行啦:例:将端口设为2004,clientsocket1.localport:=2004;
      

  8.   

    TO 楼主:
    ‘只要一用form1.ServerSocket1.Socket.Connections[int_index].Close;
    这个报内存错误,说操作一个非法的socket!’这人是不会错的,我的程序里就是这样处理的。可能是int_index 的值取错了,吧,它是整形值;是从0..n的数。
      

  9.   

    int_index取值没有错的,就是
            for(int i=0;i<ServerSocket1->Socket->ActiveConnections;i++)
            {
                if(ServerSocket1->Socket->Connections[i]==Socket)//确定是那一个客户端
                {
                    ServerSocket1->Socket->Connections[i]->Close();
                }
            }
    我想因为这个socket客户端已经关闭,你再关闭所以就报错拉!
      

  10.   

    up
    http://expert.csdn.net/Expert/topic/2994/2994314.xml?temp=.7303888
      

  11.   

    真希望有高人能出来帮忙这些问题!http://expert.csdn.net/Expert/topic/2994/2994314.xml?temp=.7303888
      

  12.   

    老大,不会吧!我在客户端用ClientSocket1.Active:=False 就可以释放掉服务器端的socket