gpt4 book ai didi

ios - 使用 NSOutputStream 通过套接字发送数据的正确方法

转载 作者:技术小花猫 更新时间:2023-10-29 10:57:43 27 4
gpt4 key购买 nike

我刚刚开始在 iOS 上进行套接字编程,我正在努力确定 NSOutputStreamsNSStreamEventHasSpaceAvailable 事件的使用。

一方面,Apple's official documentation (Listing 2)显示在 -stream:handleEvent: 委托(delegate)方法中,数据应使用 -write:maxLength: 消息写入输出缓冲区,从缓冲区连续传递数据,无论何时接收到 NSStreamEventHasSpaceAvailable 事件。

另一方面,this tutorial from Ray Wenderlichthis iOS TCP socket example on GitHub完全忽略 NSStreamEventHasSpaceAvailable 事件,并在需要时继续 -write:maxLength: 到缓冲区(甚至忽略 -hasSpaceAvailable) .

第三,有this example code这似乎两者...

因此,我的问题是,将数据写入连接到套接字的 NSOutputStream 的正确方法是什么?如果可以(显然)忽略 NSStreamEventHasSpaceAvailable 事件代码,它有什么用?在我看来,要么发生了非常幸运的 UB(在示例 2 和 3 中),要么有几种方法可以通过基于套接字的 NSOutputStream...

发送数据

最佳答案

您可以随时写入流,但对于网络流,-write:maxLength: 仅在至少一个字节被写入套接字之前返回写缓冲区。因此,如果套接字写缓冲区已满(例如,因为连接的另一端读取数据的速度不够快),这将阻塞当前线程。如果你从主线程写,这会阻塞用户界面。

NSStreamEventHasSpaceAvailable 事件在您可以写入流时发出信号没有阻塞。仅响应该事件而写入可避免当前线程并且用户界面可能被阻止。

或者,您可以从单独的“编写器线程”写入网络流。

关于ios - 使用 NSOutputStream 通过套接字发送数据的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22911153/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com