如何通过接受服务器套接字来创建NSInputStream/NSOutputStream对



我知道您可以根据流编程指南,通过使用CFStreamCreatePairWithSocketToHost打开TCP客户端连接来创建NSInputStreamNSOutputStream对(免费桥接到CFReadStreamCFWriteStream)。

如何创建一个在端口上侦听并接受NSInputStreamNSOutputStream对连接的TCP服务器

RemoteCurrency示例项目在QServer.m(以前称为TCPServer.m)中提供了一个示例。示例代码实际上是用于设置Bonjour广告的,但对于一个简单的TCP服务器,可以排除这一部分。

通过调用CFSocketSetAddressCFSocketCreatebindlisten调用到端口,创建一个带有自己的accept回调的套接字,并通过先调用CFSocketCreateRunLoopSource再调用CFRunLoopAddSource开始获得accept回调。

然后,在accept回调中,使用CFStreamCreatePairWithSocket从连接句柄创建NSInputStream/NSOutputStream对,设置输入流的委托,并通过调用scheduleInRunLoop:forMode:open这两个流开始接收recv回调。

使用NSInputStream和NSOutputStream抽象(与创建新线程和调用标准UNIX函数socketbindlistenacceptsendrecv不同),可以在与OSX上其他基于运行循环的API相同的NSRunLoop中轻松接收网络事件。

我有一个可以下载的示例应用程序,它可以创建一对通过套接字连接的NSStream。然后,它使用iOS设备上的相机通过插座流式传输完美的实时视频:

代码简洁易懂(忽略项目中的额外文件;NavController.h/m和PeerConnectionViewController.h-m以及CameraViewController.h是仅有的三个相关文件):

https://app.box.com/s/fnim5ril4mzu518wj98zy3ah8l83jayv

相关内容

  • 没有找到相关文章

最新更新