2011-01-28 7 views
1

Я пытаюсь получить данные с сервера и проанализировать его.C winsock «синтаксический анализ»

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

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

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

ответ

1

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

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

3

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

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

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

Смежные вопросы