【问题标题】:How to create a NSInputStream/NSOutputStream pair by accepting a server socket?如何通过接受服务器套接字来创建 NSInputStream/NSOutputStream 对?
【发布时间】:2013-12-13 23:14:25
【问题描述】:

我知道您可以根据Stream Programming Guide 使用CFStreamCreatePairWithSocketToHost 打开 TCP 客户端连接,从而创建 NSInputStreamNSOutputStream 对(免费桥接到 CFReadStreamCFWriteStream)。

如何创建一个 TCP 服务器 来侦听端口并以 NSInputStreamNSOutputStream 对的形式接受连接?

【问题讨论】:

    标签: tcp nsstream nsinputstream nsoutputstream cfstream


    【解决方案1】:

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

    您通过调用CFSocketCreate 创建一个带有自己的接受回调的socket,通过调用CFSocketSetAddress 绑定listen 到一个端口,并通过调用CFSocketCreateRunLoopSourceCFRunLoopAddSource 开始获取接受回调。

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-18
        • 1970-01-01
        相关资源
        最近更新 更多