【问题标题】:C winsock "rolling parsing"C winsock“滚动解析”
【发布时间】:2011-01-28 06:45:40
【问题描述】:

我正在尝试从服务器接收数据并对其进行解析。

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

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

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

【问题讨论】:

    标签: c winsock


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-16
        • 2013-01-13
        • 2013-10-30
        • 2011-02-20
        • 1970-01-01
        • 2013-02-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多