偶尔会出现这个错误“通常每个套接字地址 (协议/网络地址/端口)只允许使用一次。”哪位大侠帮帮忙?

解决方案 »

  1.   

    aSocket.Shutdown(SocketShutdown.Both);
    aSocket.Close();
      

  2.   

    并不是不能释放,是释放的要一点时间(C#这点真烂,不如C++)aSocket.Shutdown(SocketShutdown.Both);
    aSocket.Close();
    System.Threading.Thread.Sleep(100);//暂停一下
    接着再用
      

  3.   

    aSocket.Shutdown(SocketShutdown.Both);
    aSocket.Close();这个肯定是写了,System.Threading.Thread.Sleep(100);//暂停一下
    但是暂停是肯定不行的,要的就速度,100ms太长了,我以前用一模一样的代码,请求一次的时间能达到2毫秒之内,而且以这个速度连续请求50万次,都没出这个错误,不知道现在是为什么!
    希望高手帮帮忙!谢谢
      

  4.   

    我突然想到有可能是framework版本的问题,因为以前正常的程序是在一台framework1.0的机器上,现在是在一台framework1.1的机器上!
      

  5.   

    换到framework1.0的机器上就没这个问题了。
      

  6.   

    据我所知,TCP在连接关闭(主动关闭的一方)的时候会进入个2MSL等待状态,MSL是一个报问段最大生存时间,在连接处于2MSL等待时,将不能重新启用相同的端口,但过会就可以了,我不知道是不是可能是这个原因,我也在写个SOCK程序,正想测试下MSL的时间是多少,而且每个系统的版本都不一样。
      

  7.   

    固定本地端口可以用Socket.Bind方法啊
      

  8.   

    楼主,你报以上那种错,应该是你的server端有问题,绑定了端口,没有释放,以上方法只能关闭client的连接,不能关闭你监听的端口,所以你的server程序再次绑定端口就会报错了,请问楼主使用的是短连接还是长连接模式?
    有空同我交流MNS:[email protected],我们的项目用socket连接都没有问题
      

  9.   

    deng1107(游戏人间(.net)) ,是短连接。
      

  10.   

    System.Diagnostics.Process pros = System.Diagnostics.Process.GetProcesses();
    for(int i = 0; i < pros.Length; i++)
    {
     if(pros[i].ProcessName = "你程序的进程名")
     {
       pros[i].Kill();
       break;
     }
    }