具有多个客户端的 TCPListener

TCPListener with multiple Clients

我使用分层架构。我创建一个服务器。我希望服务器在数据到达时进行监听。 这是我在数据访问层的服务器代码。

public class ServerDal : IServerDal
    {
        private TcpListener server;
        private TcpClient client = new TcpClient();
        public bool ServerStart(NetStatus netStatus)
        {
            bool status = false;
            try
            {
                server = new TcpListener(IPAddress.Parse(netStatus.IPAddress), netStatus.Port);
                server.Start();
                status = true;
            }
            catch (SocketException ex)
            {
                Console.WriteLine("Starting Server Error..." + ex);
                status = false;
            }
            return status;
        }
        public string ReceiveAndSend(NetStatus netStatus)
        {
            Byte[] bytes = new Byte[1024];
            String data = null;

            Mutex mutex = new Mutex(false, "TcpIpReceive");
            mutex.WaitOne();

            if (!client.Connected)
                client = server.AcceptTcpClient();
            try
            {
                NetworkStream stream = client.GetStream();
                int i;
                if ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                {
                    data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
                    Console.WriteLine("Received: " + data);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Connection Error..." + ex);
                client.Close();
            }
            finally
            {
                mutex.ReleaseMutex();
            }
            return data;
        }

我可以监听第一次连接到服务器的客户端。当第一个连接的客户端断开连接时,我可以收听第二个连接的客户端。 我想听听两个客户端何时发送数据。我怎样才能做到这一点 ?。感谢您的帮助

我解决了这个问题。

static List<TcpClient> tcpClients = new List<TcpClient>();
        public void ReceiveMessage(NetStatus netStatus)
        {
            try {
                TcpClient tcpClient = server.AcceptTcpClient();
                tcpClients.Add(tcpClient);

                Thread thread = new Thread(unused => ClientListener(tcpClient, netStatus));
                thread.Start();
            }
            catch(Exception ex) {
                Console.WriteLine("[ERROR...] Server Receive Error = {0} ", ex.Message);
            }

        }
        public void ClientListener(object obj, NetStatus netStatus)
        {
            try 
            {
                TcpClient tcpClient = (TcpClient)obj;
                StreamReader reader = new StreamReader(tcpClient.GetStream());

                while(true)
                {
                    string message = null;
                    message = reader.ReadLine();
                    if(message!=null)
                    {
                        netStatus.IncommingMessage = message;
                        Console.WriteLine("[INFO....] Received Data = {0}", message);
                    }
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine("[ERROR....] ClientListener Error = {0}", ex.Message);
            }
        }