【问题标题】:Using Sockets with NSXPCConnection将套接字与 NSXPCConnection 一起使用
【发布时间】:2015-01-06 20:18:27
【问题描述】:

在使用带有 NSXPCConnection 的套接字时遇到问题。

基本上,有一个主进程和一个辅助进程在运行,通过 NSXPCConnection 建立。该辅助进程需要充当服务器并侦听特定端口(例如 111),该端口接收外部连接。

助手进程使用 Apple 提供的 TCPServer 助手类(CFSocket 的包装器)打开一个监听套接字。代码在这里找到: https://code.google.com/p/iphone-remotepad/source/browse/trunk/RemotePad/TCPServer.h?r=238

套接字在- (BOOL)start:(NSError **)error中打开成功。

外部客户端可以通过 111 端口建立。 (通过telnet localhost 111 在终端中测试)。

但是,辅助进程永远不会收到 TCPServer 回调 TCPServerAcceptCallBack

帮助进程启用了com.apple.security.network.client 授权。

另外,当我在主应用程序而不是辅助进程中运行 TCPServer 时,在端口 111 上设置服务器,并尝试连接到端口 111,我确实收到了回调。

关于为什么辅助进程没有收到套接字回调的任何想法? XPC 相关问题?

【问题讨论】:

    标签: tcpserver entitlements xpc cfsocket nsxpcconnection


    【解决方案1】:

    好的,问题解决了。

    xpc 服务为您提供类型为 dispatch_main 的默认运行循环。

    您想用 NSRunLoop 替换它 - 通过更改 xpc 服务信息 plist 来完成:

    https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingXPCServices.html

    完成后,您想在 xpc 服务中手动创建一个运行循环,如下所示:

    do {
        @autoreleasepool {
            [[NSRunLoop currentRunLoop]run];
        }
    } while (YES);
    

    设置完成后,TCPServer(需要一个活动的运行循环)将返回回调,您将能够获取传入的数据。

    【讨论】:

      猜你喜欢
      • 2011-02-26
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      相关资源
      最近更新 更多