Я думаю, вы должны внести некоторые изменения в свой код.
Когда клиент подключается, создайте объект TcpClient с помощью этого оператора
TcpClient client = listener.AcceptTcpClient()
Затем можно создать поток для обработки клиента, чтобы основной поток не зависал.
if (!listener.Pending())
{
TcpClient client = listener.AcceptTcpClient();
Thread newThread = new Thread(this.ServeClient);
newThread.Start(client);
}
Тогда метод для обработки потоков
public static void ServerClient(TcpClient client)
{
// Do some work
}
Было бы лучше, если бы вы использовали пул потоков вместо создания одного нового потока при каждом соединении. Используя этот метод, вы можете контролировать максимальное количество соединений, которые может обрабатывать ваш сервер. Я не знаю много об этой функции, так как я не использовал ее в больших программах.
Я бы предложил вам проверить пример проекта кода в Пуле потоков