objective-c - CFReadStreamRead读取时如何区分数据包?

标签 objective-c ios sockets asyncsocket

我觉得我错过了一些基本信息,但是,我面临的问题是我得到的一个数据包由两个合并的其他数据包组成。服务器 API 工作正常,仅当多个写入和读取同时发生时才会发生此合并。那么,问题是,如果服务器通过套接字执行多次写入,谁负责区分数据包的开始位置、结束位置以及第二个数据包的开始位置?我还是 CFReadStreamRead?

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

最佳答案

不清楚你在这里所说的“数据包”是什么意思,我怀疑你使用这个术语非常宽松。确定数据包(即 IP 数据包)边界的位置是在网络层,它远低于您所讨论的任何事物。

在您谈论的层,所有写入都将连接在一起。字节就是字节。一次写入无论如何并不意味着一次读取。多次写入可以映射到一次读取,反之亦然。由协议(protocol)来指示协议(protocol)认为是单独消息的事物之间的边界在哪里。在您描述的情况下,这意味着这是您和服务器之间的问题。

关于objective-c - CFReadStreamRead读取时如何区分数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9362881/

相关文章:

java - "Endless"来自套接字的 AudioInputStream

c - 通过 LD_PRELOAD 插入 JVM 时卡在关闭套接字上

objective-c - UITextField 成为第一响应者时自动大写键盘

ios - Swift:无法访问声明库中的方法

ios - FBRequestConnection 不提供 UI 而 FBDialog 提供

linux - 创建后将 POSIX 套接字的类型从 UDP 更改为 TCP

objective-c - Cocoa 容器的 deepCopy - 如何防止无限递归?

javascript - 如何从 objective-c 方法调用我的 phonegap ios 应用程序中的 javascript 函数?

ios - If 语句会导致 iOS 设备崩溃,但不会导致模拟器崩溃

ios - 如何在 Objective-C 中重置对象