在将套接字与NSXPCConnection一起使用时遇到问题。
基本上,有一个主进程和一个助手进程在运行,它们是通过NSXPCConnection建立的。该辅助进程需要充当服务器并侦听接收外部连接的特定端口(例如111)。
助手进程使用苹果提供的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相关的问题?
发布于 2015-01-07 13:40:36
Ok解决了这个问题。
xpc服务为您提供了dispatch_main类型的默认运行循环。
您希望通过更改xpc服务信息plist将其替换为NSRunLoop - done:
完成后,您需要在xpc服务中手动创建一个run循环,如下所示:
do {
@autoreleasepool {
[[NSRunLoop currentRunLoop]run];
}
} while (YES);准备就绪后,TCPServer (它需要一个活动的运行循环)将返回回调,您将能够获得传入的数据。
https://stackoverflow.com/questions/27806541
复制相似问题