Стабильность разъема - PullRequest
       2

Стабильность разъема

0 голосов
/ 28 февраля 2012

У меня есть сервер асинхронных сокетов, написанный на C #. Часто мои пользователи жалуются, что они отключены без какой-либо причины. Другие интернет-приложения на компьютере пользователя (MSN, SKYPE и т. Д.), По-видимому, хорошо подключены, и, следовательно, это не проблема с их интернет-соединением. Может ли кто-нибудь предоставить некоторую информацию о том, как сделать соединение между клиентом и сервером надежным (я имею в виду предотвращение частого отключения) или где я могу найти проблемы с отключением?

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

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

Вы не дали много информации для продолжения, поэтому проблема NAT - это всего лишь одна из многих возможностей.

Лучший способ диагностировать ошибки подключения - это инвестировать значительные средства в ведение журнала сетевых сообщений (как на клиенте, так и на сервере), событий сокетов и всех возвращаемых значений из API сокетов.Таким образом, если клиент сообщает о проблеме, он может отправить вам свои журналы - и, надеюсь, вы сможете получить соответствующие журналы сервера для сравнения.Затем вы можете диагностировать, откуда произошло отключение и / или из-за ошибки сокета сбросить соединение.С большой вероятностью что-то в вашем коде вызывает разъединение.

0 голосов
/ 28 февраля 2012

Полагаю, вы говорите о TCP здесь.Библиотека сокетов, которую используют клиенты вашего приложения, в значительной степени совпадает с той, которую они используют для подключения к Skype или MSN.Обычно причиной отключения является то, что одна из сторон закрывает сокет (например, после того, как соединение какое-то время не используется).Проверьте места в вашем коде, где вы закрываете свои соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...