проблема в правильном захвате tcp пакета - PullRequest
0 голосов
/ 11 февраля 2011

Сэр, Я посылаю какую-то строку, используя сокет TCP, в другую систему. Я взял 8 кнопок. При нажатии каждой кнопки другая строка отправляется на тот же IP-адрес и PORT, используя один и тот же сокет. Сокет подключается к указанному IP один раз при запуске. Сейчас во второй системе я анализирую пакет (используя какой-то анализатор пакетов), но я не смог найти данные должным образом. Проблема: если я нажму одну кнопку и проанализирую пакет, это нормально. Я нашел пакет и часть данных отдельно. это хорошо. Но если я нажму 3 или 4 кнопки и после этого проанализирую пакет в анализаторе пакетов, я обнаружу, что все строки (из нажатых кнопок) подключены к части данных, тогда как есть только одна часть заголовка. Там должны быть разные пакеты для разных кликов. я имею в виду, что каждая строка должна быть инкапсулирована в другой пакет. В чем может быть проблема? Пожалуйста, ответьте ... Спасибо .....

1 Ответ

2 голосов
/ 11 февраля 2011

Нет, tcp - это потоковый протокол.Вы помещаете данные в чанки на одном конце, но границы между этими чанками, вероятно, исчезают, когда данные поступают на удаленный конец.

Если вы должны использовать tcp, тогда у вас будет несколько вариантов.*

  1. Префикс каждого фрагмента данных с заголовком, который включает длину данных, очищает очередь передачи, считывает только заголовок на удаленном конце и использует его для дальнейшего чтения данных.
  2. Создайте новое tcp-соединение для каждого пакета (скорее как базовый протокол http).
  3. Сделайте каждый чанк одинакового размера (скажем, 40 байтов) и внимательно прочитайте его на удаленном конце.1012 * Кстати, вам, вероятно, нужно убедиться, что в сокете есть только один поток записи.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...