无法通过 TCP/IP 发送第二条消息

Could not send second message over TCP/IP

我正在尝试使用 TCPClientTCPListner

在 c# 应用程序中通过 TCP/IP 发送消息

以下是我从代码项目网站获得的代码。

客户端 code written over btn click

try
        {
            TcpClient tcpclnt = new TcpClient();
            Console.WriteLine("Connecting.....");

            tcpclnt.Connect("192.168.0.102", 8001);
            // use the ipaddress as in the server program

            Console.WriteLine("Connected");
            //Console.Write("Enter the string to be transmitted : ");

            String str = textBox1.Text;
            Stream stm = tcpclnt.GetStream();

            ASCIIEncoding asen = new ASCIIEncoding();
            byte[] ba = asen.GetBytes(str);
            Console.WriteLine("Transmitting.....");

            stm.Write(ba, 0, ba.Length);

            byte[] bb = new byte[100];
            int k = stm.Read(bb, 0, 100);

            for (int i = 0; i < k; i++)
                Console.Write(Convert.ToChar(bb[i]));


            tcpclnt.Close();
        }

        catch (Exception ex)
        {
            Console.WriteLine("Error..... " + ex.Message);
        }

服务器 code written on form_load

try
        {
            IPAddress ipAd = IPAddress.Parse("192.168.0.102");
            // use local m/c IP address, and 
            // use the same in the client

            /* Initializes the Listener */
            TcpListener myList = new TcpListener(ipAd, 8001);

            /* Start Listeneting at the specified port */
            myList.Start();

            Console.WriteLine("The server is running at port 8001...");
            Console.WriteLine("The local End point is  :" +
                              myList.LocalEndpoint);
            Console.WriteLine("Waiting for a connection.....");

            Socket s = myList.AcceptSocket();
            Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);

            byte[] b = new byte[100];
            int k = s.Receive(b);
            Console.WriteLine("Recieved...");
            string str = string.Empty;
            for (int i = 0; i < k; i++)
            {
                Console.Write(Convert.ToChar(b[i]));
                str = str + Convert.ToChar(b[i]);

            }
            label1.Text = str;
            ASCIIEncoding asen = new ASCIIEncoding();
            s.Send(asen.GetBytes("The string was recieved by the server."));
            Console.WriteLine("\nSent Acknowledgement");
            /* clean up */
            s.Close();
           // myList.Stop();

        }

我在 client 上发送用文本框写的字符串 tcpserver 很好地接收了它。

但是当我尝试发送另一个字符串时,它失败了 exception 并且客户端应用程序挂起无限时间。

这里有什么问题?

查看您提供的代码,服务器仅尝试从客户端读取 1 条消息,因此需要置于循环中以读取来自客户端的多条传入消息,处理消息并发送响应,然后收到更多消息。

另请注意,服务器目前只希望有一个客户端连接、处理该客户端然后关闭。

客户端的设置与示例中的基本相同,因此您不能在不修改另一个的情况下修改一个的工作方式。

服务器应始终处于侦听模式,即服务器代码应处于 while 循环中,以便它可以连续接受客户端。您的服务器将接受一个客户端,然后自行关闭。因此,如果您单击客户端的按钮,一个新的客户端会尝试连接到服务器,但现在服务器将不可用。