Чтение из сокета - PullRequest
       5

Чтение из сокета

0 голосов
/ 10 июня 2010

У меня есть данные из сокета, который является заголовком и сообщением.Заголовок, если 5 байтов, 3-й и 4-й - это длина сообщения.

Я читаю из сокета, может кто-нибудь предложить мне хорошую функцию, он вернет мне сообщение.при условии, что я читаю 1024 байта, и может случиться так, что я получил только частичные данные.

Ответы [ 2 ]

1 голос
/ 10 июня 2010

Вы должны поместить вызов read() / recv() в цикл, который вы выходите, как только прочитаете достаточно данных. Если получены только частичные данные, вы должны продолжить чтение, пока не получите достаточно для анализа пакета.

1 голос
/ 10 июня 2010

Зачем вам читать 1024 байта?Прочитайте 5 байтов, повторяя чтение, если необходимо, до тех пор, пока вы на самом деле не получите 5 байтов (или ошибку).Затем вы узнаете, как долго это сообщение: так многократно читайте, пока не получите все данные для сообщения.(Конечно, при каждом вызове вы запрашиваете столько данных, сколько вам действительно нужно - поэтому, если при чтении заголовка вы сначала читаете 2 байта, то при следующем вызове запрашиваете 3 байта, то есть остаток заголовка.)

Чтение большего, чем вам нужно, просто требует сложности - это означает, что вы должны запомнить эти данные где-то для следующего чтения.

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