Здравствуйте.
Решил сесть и повторить тему сетей, а сейчас перешел к сетевому программированию. Изучив некоторую базу в виде представления в c# ip адресов, сокетов и прочего, начал разбираться с классами TcpListener и TcpClient.
Суть вопроса
Определен простейший сервер в виде TcpListener на локальном хосте и конкретно взятом порте:
const int maxPartySize = 2;
var party = new List<TcpClient>();
var ip = IPAddress.Loopback;
var port = 50000;
var server = new TcpListener(ip, port);
server.Start();
Console.WriteLine("Сервер запущен..");
while (true)
{
if (server.Pending() && party.Count < maxPartySize)
{
using TcpClient currentClient = await server.AcceptTcpClientAsync();
party.Add(currentClient);
Console.WriteLine($"Клиент {currentClient.Client.RemoteEndPoint} подключен. Текущий размер группы: {party.Count}");
}
}
Также есть 3 экземпляра класса TcpClient, которые подключаются к указанному хосту через ip и порт, на которых работает сервер, описанный выше:
var destinationIp = IPAddress.Loopback;
var destinationPort = 50000;
var clients = new List<TcpClient>
{
new TcpClient(),
new TcpClient(),
new TcpClient()
};
foreach (var c in clients)
{
await c.ConnectAsync(destinationIp, destinationPort);
if (c.Connected)
Console.WriteLine($"Соединение с {c.Client.RemoteEndPoint} установлено.");
}
По какой то причине на стороне клиента отображается успешное подключение всех 3, несмотря на то, что физически подключено лишь 2. Корректную информацию о подключении отображает сервер, он подключает сначала первого, потом второго, на этом собственно все, как и должно быть из-за установленного лимита.
Почему так происходит? Может, стоит сделать ограничение на подключение другим способом?