我知道您可以根据流编程指南,通过使用CFStreamCreatePairWithSocketToHost
打开TCP客户端连接来创建NSInputStream
和NSOutputStream
对(免费桥接到CFReadStream
、CFWriteStream
)。
如何创建一个在端口上侦听并接受NSInputStream
和NSOutputStream
对连接的TCP服务器?
RemoteCurrency示例项目在QServer.m(以前称为TCPServer.m)中提供了一个示例。示例代码实际上是用于设置Bonjour广告的,但对于一个简单的TCP服务器,可以排除这一部分。
通过调用CFSocketSetAddress
将CFSocketCreate
、bind和listen调用到端口,创建一个带有自己的accept回调的套接字,并通过先调用CFSocketCreateRunLoopSource
再调用CFRunLoopAddSource
开始获得accept回调。
然后,在accept回调中,使用CFStreamCreatePairWithSocket
从连接句柄创建NSInputStream
/NSOutputStream
对,设置输入流的委托,并通过调用scheduleInRunLoop:forMode:
和open
这两个流开始接收recv回调。
使用NSInputStream和NSOutputStream抽象(与创建新线程和调用标准UNIX函数socket
、bind
、listen
、accept
、send
、recv
不同),可以在与OSX上其他基于运行循环的API相同的NSRunLoop中轻松接收网络事件。
我有一个可以下载的示例应用程序,它可以创建一对通过套接字连接的NSStream。然后,它使用iOS设备上的相机通过插座流式传输完美的实时视频:
代码简洁易懂(忽略项目中的额外文件;NavController.h/m和PeerConnectionViewController.h-m以及CameraViewController.h是仅有的三个相关文件):
https://app.box.com/s/fnim5ril4mzu518wj98zy3ah8l83jayv