Когда сокет Java отправляет подтверждение? - PullRequest
1 голос
/ 31 января 2010

Мой вопрос: когда сокет на стороне приемника отправляет подтверждение? В то время, когда приложение считывает данные сокета или когда нижележащие слои получают данные и помещают их в буфер?

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

Ответы [ 3 ]

5 голосов
/ 31 января 2010

Это зависит от стека TCP операционной системы, когда это происходит, поскольку TCP предоставляет поток приложению, поэтому нет гарантированной корреляции 1: 1 между приложением, выполняющим чтение / запись, и пакетами, отправляемыми по проводам, и TCP-подтверждениями.

Если вам необходимо убедиться, что другая сторона получила / обработала ваши данные, вам необходимо встроить их в протокол приложения - например, отправить ответ о том, что данные были получены.

3 голосов
/ 01 февраля 2010

TCP ACK предназначены для подтверждения пакетов TCP на уровне передачи, а не на уровне приложений. Только ваше приложение может явно указать, что оно также обработало данные из буферов.

0 голосов
/ 31 января 2010

TCP / IP (и, следовательно, java-сокеты) гарантируют, что вы либо успешно отправите данные, либо в конечном итоге получите ошибку (исключение в случае java).

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