C winsock "разборный прокат" - PullRequest
       4

C winsock "разборный прокат"

1 голос
/ 28 января 2011

Я пытаюсь получить данные с сервера и проанализировать их.

http://pastebin.com/1kjXnXwq http://pastebin.com/XpGSgRBh

все работает как есть, но я хочу проанализировать данные, а не простосхватив блоки и распечатав их.есть ли способ получить данные из winsock до \ n, затем остановить и передать их другой функции для анализа, и как только эта функция вернется, продолжайте чтение с последней точки, пока не появится другая \ n, и повторите процесс, пока не будетничего не осталось получить?

функция, которая должна делать это, называется msgLoop () и расположена во второй строке pastebin.

Ответы [ 2 ]

3 голосов
/ 29 января 2011

Чтобы прочитать строку, определенную \n из сокета, вам необходимо:

  1. чтение из сокета 1 байт за раз, пока вы не встретите \n байт. Любые непрочитанные байты остаются в сокете, пока вы не прочитаете их позже. Это не очень эффективно, но работает.

  2. создать кеш данных. Когда вам нужна новая строка, сначала проверьте кэш, чтобы увидеть, есть ли в ней уже \n байт. Если нет, то продолжайте чтение из сокета большими блоками и сохраняйте их в кеше, пока не встретите байт \n. Затем обработайте содержимое кэша до первого \n байта, удалите обработанные байты и переместите все оставшиеся байты в начало кэша для последующего чтения.

1 голос
/ 28 января 2011

Нет встроенного метода readLine для сокетов.Таким образом, вам нужно будет реализовать это самостоятельно, но это не слишком сложно.Я нашел этот пример от Google, вы можете улучшить его:

http://johnnie.jerrata.com/winsocktutorial/

...