我正在编写简单的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
。
程序启动时,只有第一个连接的客户端可以接收服务器。但是第二个客户没有。而第二个客户端成功连接到服务器。