Постоянное соединение TCP клиент / сервер - PullRequest
1 голос
/ 01 марта 2011

Я создаю клиент-серверное приложение с устройства Android на сервер через 3G. Из-за оператора сети, который предоставляет 3G, клиентское устройство находится за NAT. Поэтому сервер не может установить соединение с клиентом. Я мог бы принять подход опроса, но прежде чем сделать это, я хочу исчерпать все другие варианты. Есть ли какой-то способ (я еще не нашел) сохранить соединение TCP Socket открытым между клиентом и сервером, чтобы сервер мог инициировать связь с клиентом?

Сценарий состоит в том, что будет очень регулярное соединение клиент / сервер, основанное на состоянии сервера, которое обновляется на очень регулярной основе - мы будем говорить каждые пару секунд. Будет ли UDP лучшим вариантом здесь? Может быть, нет, поскольку проблема NAT все еще сбивает его с ног.

Есть ли другие доступные мне варианты?

Большое спасибо

Ответы [ 2 ]

4 голосов
/ 01 марта 2011

NAT не означает, что сервер не может ничего отправлять.Просто откройте соединение с клиентом и позвольте серверу отправлять любые события, которые он записывает.Возможно, вы также захотите включить простой протокол пульса, чтобы клиент и сервер регистрировали разорванное соединение, и чтобы NAT знал, что соединение все еще используется.

2 голосов
/ 01 марта 2011

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

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