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

问题描述:

我知道你可以创建一个NSInputStreamNSOutputStream对(根据Stream Programming Guide,使用CFStreamCreatePairWithSocketToHost打开一个TCP客户端连接,免费桥接到CFReadStream,CFWriteStream)。如何创建通过接受服务器套接字NSInputStream/NSOutputStream对?

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

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

通过调用CFSocketCreate绑定创建插座用自己接受回调调用CFSocketSetAddress到一个端口,并开始得到通过调用CFSocketCreateRunLoopSource其次CFRunLoopAddSource接受回调。

然后,在接受回调,您创建连接NSInputStream/NSOutputStream对把使用CFStreamCreatePairWithSocket,设置输入流的代表,并开始通过调用scheduleInRunLoop:forMode:接收的recv回调,然后open两个流开始使用它们。

使用NSInputStreamNSOutputStream抽象(而不是创建新线程和调用标准UNIX功能socketbindlistenacceptsendrecv)允许人们容易地在相同的NSRunLoop接收网络事件的其余部分OSX上的基于运行循环的API。

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

该代码简洁且易于遵循(忽略项目中的额外文件; NavController.h/m和PeerConnectionViewController.h/m和CameraViewController.h/m是唯一的三个相关文件):

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