Как узнать, какой последний сегмент TCP получен сервером при передаче данных? - PullRequest
0 голосов
/ 27 февраля 2010

При передаче данных в TCP и с учетом всех входящих и исходящих пакетов, как узнать, является ли полученный пакет последним из данных?

TCP-пакеты разбиты на более мелкие части. Я передаю по протоколу HTTP.

Ответы [ 3 ]

1 голос
/ 27 февраля 2010

Когда флаг FIN установлен одним концом соединения, это означает, что этот конец больше не будет отправлять данные.

Если соединение не закрывается после последних данных, то должен быть метод определения уровня приложения. Для HTTP правила достаточно сложны.

0 голосов
/ 09 декабря 2015

Вы можете использовать PSH флаг протокола TCP. В последнем пакете должно быть установлено значение 1.

Для подтверждения просто начните трассировку, сделайте HTTP GET и отфильтруйте сессию. Вы обнаружите, что последний пакет для каждого ответа на вашем HTTP GET помечен этим флагом.

0 голосов
/ 08 марта 2010

Я предполагаю, что вы используете какую-то библиотеку сокетов. Вы можете сказать, что соединение TCP завершено, потому что read() на сокете вернет 0. Это произойдет, когда другая сторона закроет соединение (чего оно никогда не должно делать).

...