C winsock“滚动解析”

我正在尝试从服务器接收数据并解析它。

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

一切都按原样工作,但我想解析数据,而不是只是抓取它的块并打印出来。 所以有没有办法从winsock中获取数据,直到\ n然后停止并将其传递给另一个要解析的函数,一旦该函数返回继续从最后一点读取,直到另一个\ n显示并重复该过程,直到有什么都没收到?

应该执行此操作的函数称为msgLoop(),位于第二个pastebin行中。

要从套接字读取\n终止字符串,您必须:

  1. 每次从套接字读取1个字节,直到遇到\n字节。 任何未读的字节都会保留在套​​接字中,直到您稍后再读它们为止。 这不是很有效,但它有效。

  2. 创建数据缓存。 当您需要新字符串时,首先检查缓存以查看其中是否存在\n字节。 如果没有,则继续从较大的块中读取套接字并将它们存储到缓存中,直到遇到\n字节。 然后处理缓存的内容直到第一个\n字节,删除您处理的字节,并将任何剩余的字节移动到缓存的前面以便以后读取。

套接字没有内置的“readLine”方法。 所以,你需要自己实现它,但它并不太棘手。 我通过谷歌搜索找到了这个例子,你可以改进它:

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