Почему данные не будут отправлены и / или получены TcpClient через NetworkStream? - PullRequest
0 голосов
/ 26 августа 2018

Я делаю приложение клиент / сервер TCP / IP. Сервер используется в качестве вычислительного устройства для запуска экспериментов SVM и отправки результатов одному клиенту. Есть несколько таких серверов (вычислительных единиц) - около 70.

Каждый сервер может одновременно принимать 2 клиентов, поскольку этого достаточно для использования всего доступного процессора и памяти. Что касается клиентского приложения, то существует только один экземпляр, который использует все серверы для одновременного выполнения вычислений. Таким образом, клиент подключается ко всем 70 серверам, дважды, одновременно, давая не менее 140 подключений и, следовательно, 140 задач TPL. Внутри клиента каждое соединение с сервером находится в пределах его собственной задачи TPL.

Почему данные не будут отправлены и / или получены TcpClient через NetworkStream?

Я отправляю некоторые данные, используя TcpClient. Размер составляет около 5 МБ. Когда я отправляю меньшие объемы данных <1 МБ, данные принимаются. </p>

Если я запускаю клиент и сервер на локальном компьютере, все данные отправляются и принимаются правильно, поэтому кажется, что код правильный. Однако, когда я пытаюсь запустить один и тот же клиент и сервер через корпоративную интрасеть, данные отправляются, но не принимаются. Администраторы сети утверждают, что брандмауэр или анализ протокола отсутствуют.

Каждый клиент находится в пределах своей собственной задачи TPL. У меня до 8000 заданий. Может ли это иметь какое-либо отношение к проблеме?

Обратите внимание, я уже пытался вызвать NetworkStream.FlushAsync (). Wait () и установить TcpClient.NoDelay = true. Ни один из них не помог решить проблему.

Является ли TcpClient правильным решением для управления как минимум 140 одновременными подключениями?

...