CFReadStreamRead在读取时如何区分数据包?

时间:2012-02-20 14:38:30

标签: objective-c ios sockets asyncsocket

我觉得我缺少一些基本信息,但是,我遇到的问题是我得到一个由两个合并的其他数据包组成的数据包。服务器API工作正常,只有在多次写入和读取同时发生时才会发生此合并。因此,问题是服务器是否通过套接字执行多次写入,socket负责区分数据包的开始,结束位置和第二个数据包的启动位置?我或CFReadStreamRead?

目前,我正在使用AsyncSocket作为CFNetwork的包装,但恕我直言,问题与CFReadStreamRead本身有关:有时它会将两个数据包读为一个,而不是单独读取它们。我无法找到相关的示例和有关当多次写入和读取同时发生时流程如何的信息,我是否需要明确地做一些事情来抓取数据包或者我是否需要手动将这些数据包从即将到来的数据流中分离出来?虽然CFReadStreamRead已经做到了,但也许我错过了。

1 个答案:

答案 0 :(得分:1)

目前还不清楚“数据包”的含义是什么,我怀疑你是非常松散地使用这个术语。确定数据包(即IP数据包)边界的位置在网络层,远低于您正在谈论的任何内容。

在你所谈论的那一层,所有的写作都将被联合起来。字节是字节。单次写入不会以任何方式建议单次读取。多次写入可以映射到单个读取,反之亦然。由协议决定协议认为作为单独消息的事物之间的边界。在您描述的情况下,这意味着这是您和您的服务器之间的问题。