如何解决TCP端口占用问题

时间:2019-11-01 15:18:59

标签: c#

我的应用程序(C#Windows Forms应用程序)中有2个表单,我的问题是我必须通过两种形式的TCP / IP通信从一个设备获取值,当我尝试仅使用一种表单时,我的应用程序可以正常工作,但是如果我尝试关闭一个应用程序并午餐另一个我的应用程序显示执行:

  

System.Net.Sockets.SocketException:'通常只允许使用每个套接字地址(协议/网络地址/端口)

我的from1代码:

 private void button1_Click(object sender, EventArgs e)
    {
        timer1.Start();
        new Thread(() =>
        {
            Thread.CurrentThread.IsBackground = true;

            TcpListener server = null;
            while (!m_StopThread)
            {
                string m = " * ";
                var xx = new List<string>();
                xx.Clear();
                //---listen at the specified IP and port no.---
                TcpListener listener = new TcpListener(System.Net.IPAddress.Any, PORT_NO);
                listener.Start();
                //---incoming client connected---
                TcpClient client = listener.AcceptTcpClient();
                Console.WriteLine("Connect...");
                //---get the incoming data through a network stream---

                NetworkStream nwStream = client.GetStream();
                byte[] buffer = new byte[client.ReceiveBufferSize];

                //---read incoming stream---
                int bytesRead = nwStream.Read(buffer, 0, client.ReceiveBufferSize);

                //---convert the data received into a string---
                string dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead);

                    dataReceived = dataReceived.Substring(4);
                    string dataReceived1 = dataReceived.Substring(0, 24);


                    if (dataReceived.Length < 30)
                    {
                        name1 = chargeN(dataReceived);
                        prix1 = chargeP(dataReceived);
                        m = m + "#" + name1 + "*" + prix1;
                        Inseert(dataReceived);

                    }
                    //---write back the text to the client---
                    byte[] msg = System.Text.Encoding.ASCII.GetBytes(m);
                    Console.WriteLine("Sending back : " + m);
                    // Send back a response.     
                    nwStream.Write(msg, 0, msg.Length);

                }
                client.Client.Disconnect(true);
                client.Close();
                listener.Stop();

        }

        }).Start();



    }

对于Form2:

 private void button1_Click(object sender, EventArgs e)
    {
        timer1.Start();
        button3.Visible = true;
        button1.Visible = false;
        new Thread(() =>
        {
            Thread.CurrentThread.IsBackground = true;

            TcpListener server = null;
            while (true)
            {


                //---listen at the specified IP and port no.---
                TcpListener listener = new TcpListener(System.Net.IPAddress.Any, PORT_NO);
                Console.WriteLine("Listening...");
                listener.Start();

                //---incoming client connected---
                TcpClient client = listener.AcceptTcpClient();
                Console.WriteLine("Connect...");
                //---get the incoming data through a network stream---

                NetworkStream nwStream = client.GetStream();
                byte[] buffer = new byte[client.ReceiveBufferSize];

                //---read incoming stream---
                int bytesRead = nwStream.Read(buffer, 0, client.ReceiveBufferSize);

                //---convert the data received into a string---
                string dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead);

                    var charsToRemove = new string[] { "{", "}", "Uii", "0=", ":", " " };// (modification)
                    foreach (var ca in charsToRemove)
                    {
                        dataReceived = dataReceived.Replace(ca, string.Empty);
                    }
                    dataReceived = dataReceived.Substring(4);
                    string dataReceived1 = dataReceived.Substring(0, 24);
                    var charsToRemove1 = new string[] { " " };
                    foreach (var ca in charsToRemove1)
                    {
                        dataReceived = dataReceived.Replace(ca, string.Empty);
                    }
                    if (dataReceived.Length < 30)
                    {
                        name1 = chargeN(dataReceived);//from product
                        prix1 = chargeP(dataReceived);//from product
                        m = m + "#" + name1 + "*" + prix1;
                         test1 = testtag(dataReceived);//exist into product



                    }

                    //---write back the text to the client---
                    //nwStream.Write(buffer, 0, bytesRead);
                    byte[] msg = System.Text.Encoding.ASCII.GetBytes(m);
                    Console.WriteLine("Sending back : " + m);
                    // Send back a response.     
                    nwStream.Write(msg, 0, msg.Length);



                nwStream.Close();
                client.Close();
                listener.Stop();

            }

        }).Start();
    }

我需要你们的帮助。 Rq:第

listener.Start();

显示异常。

0 个答案:

没有答案