c# 聊天应用程序中的 tcp 服务器

tcp Server in c# chat app

我正在用 C# 制作聊天应用程序。所以我需要帮助让 tcp 服务器不停地工作。当我在服务器上发送消息时它正在接收它但随后停止并且没有收到另一条消息...

 try
    {            
            IPAddress ipAd = IPAddress.Parse("127.0.0.1");

            TcpListener myList = new TcpListener(ipAd, 8001);
            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...");
            for (int i = 0; i < k; i++)
                Console.Write(Convert.ToChar(b[i]));

            ASCIIEncoding asen = new ASCIIEncoding();
            s.Send(asen.GetBytes("The message was recieved by the server."));
            Console.WriteLine("\nSent Acknowledgement");
            Console.ReadLine();
            //  s.Close();
            //myList.Stop();
    }
    catch (Exception e)
    {
        Console.WriteLine("Error..... " + e.StackTrace);
    }

没有使 TcpListener 保持活动状态的循环。您打开端口并等待第一个套接字(myList.AcceptSocket(); 是一个阻塞操作)。然后你处理套接字并终止。

如果您使用控制台应用程序,它应该在收到第一个套接字后结束。 如果它是一个交互式应用程序(WPF,WinForm,...),它的主循环将保持 运行ning,但如果没有机制重新 运行 你的代码,就没有任何东西可以接收其他套接字。

如果你想创建一个聊天服务器,可以考虑在里面创建一个windows service with non-blocking loop