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

时间:2013-12-13 23:14:25

标签: tcp nsstream nsinputstream nsoutputstream cfstream

我知道您可以通过使用{{3打开TCP客户端连接来创建NSInputStreamNSOutputStream对(免费桥接到CFReadStreamCFWriteStream)根据{{​​3}}。

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

2 个答案:

答案 0 :(得分:1)

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

通过调用{CFSocketCreate绑定监听到端口,您可以使用自己的接受回调创建套接字 {3}},并通过调用CFSocketSetAddress后跟CFSocketCreateRunLoopSource来开始接受回调。

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

使用openNSInputStream抽象(而不是创建新线程并调用标准UNIX函数socketbindlisten,{{ 1}},acceptsend)允许用户在OSX上与其他基于运行循环的API在同一个NSRunLoop中轻松接收网络事件。

答案 1 :(得分:0)

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

代码简洁,易于理解(忽略项目中的额外文件; NavController.h / m和PeerConnectionViewController.h / m以及CameraViewController.h / m是唯一相关的三个文件): / p>

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