CFReadStreamRead 读取时如何区分数据包?
Posted
技术标签:
【中文标题】CFReadStreamRead 读取时如何区分数据包?【英文标题】:How CFReadStreamRead distinguishes packets when reading? 【发布时间】:2012-02-20 14:38:29 【问题描述】:我觉得我缺少一些基本信息,但是,我面临的问题是我得到一个数据包,其中包含两个合并的其他数据包。服务器 API 工作正常,此合并仅在同时发生多个写入和读取时发生。那么,问题是如果服务器通过套接字执行多次写入,谁负责区分数据包从哪里开始、结束以及第二个数据包从哪里开始?我还是 CFReadStreamRead?
目前,我正在使用 AsyncSocket ,它是 CFNetwork 的包装器,但恕我直言,问题与 CFReadStreamRead 本身有关:有时它将两个数据包作为一个数据包读取,而不是单独读取它们。当多个写入和读取同时发生时,我无法找到有关流如何进行的相关示例和信息,我是否需要明确地做一些事情来抓取数据包,或者我是否需要手动将这些数据包从即将到来的数据流中分离出来?虽然 CFReadStreamRead 已经做到了,但也许我错过了。
【问题讨论】:
【参考方案1】:不清楚您在这里所说的“数据包”是什么意思,我怀疑您对这个词的使用非常松散。确定数据包(即 IP 数据包)边界的位置是在网络层,它远低于您所说的任何东西。
在您所说的层上,所有写入都将连接在一起。字节就是字节。单次写入绝不意味着单次读取。多次写入可以映射到一次读取,反之亦然。由协议来指示协议认为是单独消息的事物之间的边界在哪里。在您描述的情况下,这意味着这是您和您的服务器之间的问题。
【讨论】:
谢谢,答案片段“多次写入可能映射到一次读取,反之亦然”很好地回答了我的问题:) 因为早些时候,我虽然一次写入将映射到一次读取。将开始进一步挖掘,因为我的第一个问题是,AsyncSocket 是否正常返回一个 NSData 数据包而不是两个:***.com/questions/9359391/… 是的,AsyncSocket 的行为与此处设计的一样。以上是关于CFReadStreamRead 读取时如何区分数据包?的主要内容,如果未能解决你的问题,请参考以下文章