读书人

没高手解决?SP1234?通常每个套接字地

发布时间: 2012-05-02 15:36:04 作者: rapoo

没高手解决?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分钟 除非你修改你的注册表 缩小这个值

但是如果你的软件开发完成要分发给别人使用 这种方法是不可取的

读书人网 >C#

热点推荐