无法接收第二个tcpClient

时间:2019-07-12 09:56:42

标签: c# tcp tcpserver

我正在编写简单的Chapp应用程序。我是网络编程的新手。 我启动一个TclListener并接受客户端。客户的接受处理没有问题。但是服务器仅接收第一个客户端。

这是代码示例。

客户接受。 。

 public void AcceptClients()
 {
            Console.WriteLine("Server started");
            Task.Run(() =>
            {
                while (true)
                {
                    TcpClient client = ServerSocket.AcceptTcpClient();
                    lock (_lock) tcpClients.Add(client);
                    var address = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();
                    Console.WriteLine(" IP " + address + " connected!");

                    ReceiveClients(address);
                }
            });
  }

客户接收。 。

public void ReceiveClients(string ip)
{
            Task.Run(() =>
            {
                while (true)
                {
                    //Take connected (sender) ip
                    TcpClient tcpClient = tcpClients.FirstOrDefault(x => ((IPEndPoint)x.Client.RemoteEndPoint).Address.ToString() == ip);

                    if (tcpClient == null)
                    {
                        Console.WriteLine(ip + "did not found to receive");
                        break;
                    }


                    NetworkStream stream = tcpClient.GetStream();

                    byte[] buffer = new byte[256];

                    int byte_count = stream.Read(buffer, 0, buffer.Length);

                    if (byte_count > 0)
                    {
                        string data = Encoding.ASCII.GetString(buffer, 0, byte_count);
                        string[] partialData = data.Split('~');

                        //Take ip from DB for suitable email
                        var ipForUnicast = TcpHelper.Db.UserRepository.GetIpByEmail(partialData[1]);


                        Console.WriteLine(ip + " sent " + partialData[0] + " for " + ipForUnicast + $" BY_{partialData[2]}");


                        //Add to Database
                        TcpHelper.Db.MessageRepository.Add(new Message()
                        {
                            Sender_Email = partialData[2],
                            Receiver_Email = partialData[1],
                            Content = partialData[0],
                            SentAt = DateTime.Now
                        });


                        //Send message
                        Unicast(ipForUnicast, partialData[0]);
                    }
                }
            })
}

我尝试将客户端写入客户端应用。例如,John要发送消息到Michael。首先,John必须将消息发送到服务器,而服务器帽子必须将消息发送到Michael

程序启动时,只有第一个连接的客户端可以接收服务器。但是第二个客户没有。而第二个客户端成功连接到服务器。

0 个答案:

没有答案