2012-06-12 2 views
1

У меня есть сокет клиента, который выталкивает данные изображения на серверный сокет после установления соединения. и серверные сокеты обрабатывают их без ответа ни одного ответаКлиентский сокет отправляет, но сокет Silent Server не получает

Это работает хорошо в течение нескольких минут. Но через некоторое время серверный сокет перестанет получать эти данные. Что я не мог понять, почему? Есть ли такая вещь в TCP, как если бы клиент продолжал толкать данные, сервер должен сказать что-то в противном случае, разговор остановится?

Я написал этот код несколько лет назад. и чтобы он работал, я заставил сервер возвращать ответ строки «ACK». Однако, если я изменю это на любую строку, это сработает.

Но теперь я хочу выяснить, зачем восстанавливать Программу.

ответ

0

«Односторонняя» связь с TCP полностью прекрасна, если вам не требуется подтверждение от получателя на отправляющей стороне. Но это ваш протокол на уровне приложений. На уровне транспорта пакеты все еще текут в обоих направлениях - TCP хранит порядковые номера в обоих направлениях и подтверждает их с другой стороны. Это позволяет обнаруживать упавшие/дублированные пакеты и для повторной передачи, обеспечивая тем самым надежность потока. Размер окна, согласованный во время установления связи и обновленный в течение всего времени разговора, позволяет TCP замедлять быстрый отправитель, который будет подавлять медленный приемник.

Что вам действительно нужно сделать, это записать TCP-соединение с помощью сниффера, например tcpdump(1) или wireshark, и узнать, что происходит на проводе в точке, когда «socket перестает получать эти данные».

+0

Я обнюхал движение проводом. Я видел, что Клиент продолжает отправлять. но сервер не получает ни одного из этих пакетов через несколько минут. –

+0

Вы уверены, что сервер действительно читает из сокета? Сервер отправляет TCP ACK? –

+0

Да, иначе он работает в течение первых нескольких минут. То, что я наблюдал, - это клиент сначала выталкивает пакеты, а сервер обрабатывает его, и он работает быстро в течение нескольких минут. и после этого он выглядит как трафик над потоком, который затмевает трафик. Но он должен быть хорошо обработан базовым TCP. Как ни удивительно, это не так. –

Смежные вопросы