没高手解决?SP1234?通常每个套接字地址(协议/网络地址/端口)只允许使用一次
问题如上,在论坛上查了,好像也没被解决!我也是遇到了这个问题,简单写了一个程序测试,如下,该释放也释放了,该允许重复利用端口也允许了,但是就是没解决!求CSDN高手!
- C# code
TcpClient client; const int portNO = 60000; const int localport = 2290; private void button1_Click(object sender, EventArgs e) { if (client != null) { client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontLinger, true); //client.Close(); //socketListen.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); } //else //{ IPAddress ipAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0]; IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, localport); client = new TcpClient(ipLocalEndPoint); client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); client.Connect("127.0.0.1", portNO); string msg = "LOGEIN"; byte[] buffer = System.Text.Encoding.Default.GetBytes(msg); int i = client.Client.Send(buffer); Console.ReadLine(); //} } private void button2_Click(object sender, EventArgs e) { client.Client.Disconnect(true); //client.Dispose(); client.Close(); }
[解决办法]
应该用GC手动强制把内存回收了,这个要涉及到.net核心机制内存回收,如果要细致观察推荐查看IL!
[解决办法]
tcp关闭方端口有2分钟等待时间
[解决办法]
纯发送数据 可以使用端口0 也就是 由系统指派随意未使用的端口
[解决办法]
不是特别要求,建议不要指定local portnumber
[解决办法]
如果你真想又开有关的,shutdown就行了,不要close。如果调用close,那么除非关闭进程,否则不要重用端口。
[解决办法]
哪方提出断开 哪方等待2分钟 除非你修改你的注册表 缩小这个值
但是如果你的软件开发完成要分发给别人使用 这种方法是不可取的