Трансляторы сетевых адресов (также называемые «домашними маршрутизаторами», «беспроводными шлюзами» и т. Д.), Которые совместно используют назначенный провайдером IP-адрес для нескольких компьютеров, могут быть здесь задействованы.NAT хранит таблицу активных соединений (иногда называемую «таблицей сопоставления портов»), в которой отслеживается, как преобразовать пару ip: port для активных соединений TCP и наблюдаемых сеансов UDP.Известно, что существуют маршрутизаторы некоторых марок, которые очищают отображение портов из памяти, если в течение некоторого промежутка времени не наблюдается никакого трафика, проходящего через соединение TCP.Такие приложения, как MSN Messenger и Skype, смягчают это, периодически отправляя сообщения «keep alive» между клиентом, сервером и другими постоянными соединениями.Эти сообщения идут в обоих направлениях.
Вы не дали много информации для продолжения, поэтому проблема NAT - это всего лишь одна из многих возможностей.
Лучший способ диагностировать ошибки подключения - это инвестировать значительные средства в ведение журнала сетевых сообщений (как на клиенте, так и на сервере), событий сокетов и всех возвращаемых значений из API сокетов.Таким образом, если клиент сообщает о проблеме, он может отправить вам свои журналы - и, надеюсь, вы сможете получить соответствующие журналы сервера для сравнения.Затем вы можете диагностировать, откуда произошло отключение и / или из-за ошибки сокета сбросить соединение.С большой вероятностью что-то в вашем коде вызывает разъединение.