Это выглядит для меня специфично для Windows, что не является моей сильной стороной, но ...
Вы не показываете нам код сервера, только код клиента. Я могу только предположить, что ваш серверный код принимает сокетное соединение, выполняет свою магию, отправляет что-то обратно и закрывает клиентское соединение. Если это ваш случай, тогда это проблема.
Вызов accept () является блокирующим, который ожидает следующую попытку подключения клиента и привязывается к нему. Может быть очередь попыток подключения, созданная и управляемая ОС, но она все еще может принимать только одно подключение за раз.
Если вы хотите иметь возможность обрабатывать несколько одновременных запросов, вам нужно изменить свой сервер на вызов accept (), а когда появится новое соединение, запустить рабочий поток / процесс для обработки запроса и вернуться к верхняя часть цикла, где принимают (). Таким образом, основной цикл передает фактическую работу другому потоку / процессу, чтобы он мог вернуться к бизнесу ожидания следующей попытки подключения.
Реальные серверные приложения более сложны, чем это. Они запускают в пуле кучу «рабочих пчел» потоков / процессов и используют их для будущих запросов. Веб-серверы делают это, например.
Если мои предположения о коде вашего сервера неверны, пожалуйста, сообщите нам, как он выглядит.