Проблема с сетью от java ServerSocket до iphone (только в режиме 3g) - PullRequest
2 голосов
/ 15 мая 2011

Я испытываю странное поведение:

У меня есть сервер на основе java ServerSocket, который обслуживает TCP-запросы, отправляемые с устройства iPhone. Я заметил, что когда я использую iPhone, подключенный через Wi-Fi, нет проблем с сетью. Iphone открывает соединение, а затем записывает и читает из потока, как и должно, без заметной задержки. Все идет нормально. Однако, работая с 3g, я испытываю задержку в 1,5 секунды со второй отправки первого сообщения до полного возвращения ответа. Кажется, что первый байт сообщения читается сразу после того, как сервер сбрасывает сообщение в сокет, но остальная часть сообщения задерживается примерно на секунду (!).

Я проверил это поведение сети, напечатав размер буфера, который хранится на стороне iphone, и наблюдая за сетью с помощью wireshark на стороне сервера. Wireshark также показывает это - первый байт отправляется с размером сообщения в 1 байт (всегда 0 BTW), а остальная часть сообщения отправляется впоследствии, в одном или нескольких больших сообщениях (~ 1300 байт).

Сообщение состоит из 8-байтового заголовка (2 целых числа - тип и размер) и тела этого размера.

Действительно странная вещь заключается в том, что написание аналогичного сервера, использующего тот же протокол в c ++ (с использованием poco-сервера), работает отлично.

Я использую DataOutputStream сокета для записи заголовка, используя 2 инструкции writeInt и запись (byte []), которая записывает тело. Затем я смываю поток.

Кто-нибудь знает, есть ли опция сокета (в java), которая может вызывать такого рода поведение?

Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 21 мая 2011

Я решил эту проблему, обернув поток вывода сокета BufferedOutputStream:

DataOutputStream dos = new DataOutputStream(new BufferedOutputstream(sock.getOutputStrean()));

Спасибо, Лиор

0 голосов
/ 16 мая 2011

Я предлагаю вам опубликовать трассировку Wireshark вашего сервера, так как это может дать некоторое представление о том, какие параметры сокета TCP настроены, и временной шкале от рукопожатия до первого устройства передачи данных

...