如何创建通过接受服务器套接字NSInputStream/NSOutputStream对?
我知道你可以创建一个NSInputStream
和NSOutputStream
对(根据Stream Programming Guide,使用CFStreamCreatePairWithSocketToHost
打开一个TCP客户端连接,免费桥接到CFReadStream
,CFWriteStream
)。如何创建通过接受服务器套接字NSInputStream/NSOutputStream对?
如何创建一个TCP 服务器,该服务器在一个端口上侦听并接受连接,如NSInputStream
和NSOutputStream
对?
的RemoteCurrency示例项目提供的这在QServer.m一个例子(以前称为TCPServer.m)。示例代码实际上是设立卓悦的广告,但部分可以排除一个简单的TCP服务器。
通过调用CFSocketCreate
,绑定和创建插座用自己接受回调调用CFSocketSetAddress
听到一个端口,并开始得到通过调用CFSocketCreateRunLoopSource
其次CFRunLoopAddSource
接受回调。
然后,在接受回调,您创建连接NSInputStream
/NSOutputStream
对把使用CFStreamCreatePairWithSocket
,设置输入流的代表,并开始通过调用scheduleInRunLoop:forMode:
接收的recv回调,然后open
两个流开始使用它们。
使用NSInputStream和NSOutputStream抽象(而不是创建新线程和调用标准UNIX功能socket
,bind
,listen
,accept
,send
,recv
)允许人们容易地在相同的NSRunLoop接收网络事件的其余部分OSX上的基于运行循环的API。
我有一个示例应用程序,您可以下载,创建一个对通过套接字连接NSStreams的。然后它通过使用iOS设备上的摄像头的套接字以流式传输图像完美的实时视频:
该代码简洁且易于遵循(忽略项目中的额外文件; NavController.h/m和PeerConnectionViewController.h/m和CameraViewController.h/m是唯一的三个相关文件):