0

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

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

助手进程使用Apple 提供的TCPServer助手类(wrapper around )打开一个监听套接字。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 相关问题?

4

1 回答 1

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(需要一个活动的运行循环)将返回回调,您将能够获取传入的数据。

于 2015-01-07T05:40:35.810 回答