- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 NSNetService 在 iPhone 应用程序和 Mac 应用程序之间建立通信。
到目前为止,我已将 Mac 应用程序设置为发布 iPhone 应用程序可以发现的 NSNetService,但我无法弄清楚如何在它们之间发送数据。
在我的 Mac 应用程序中,我发布了我的 NSNetService:
self.netService = [[NSNetService alloc] initWithDomain:@"" type:@"_sputnik._tcp" name:@"" port:port];
if (self.netService) {
[self.netService scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:@"PrivateMyMacServiceMode"];
[self.netService setDelegate:self];
[self.netService publish];
[self.netService startMonitoring];
NSLog(@"SUCCESS!");
} else {
NSLog(@"FAIL!");
}
一切看起来都很好,委托(delegate)方法 - (void)netServiceDidPublish:(NSNetService *)sender
(在 Mac 应用程序中)被触发。
在 iPhone 应用程序中,我创建了一个 NSNetServiceBrowser
实例,一两秒后它触发了 didFindService
委托(delegate)方法。
- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing {
TRACE;
NSLog(@"moreComing: %d", moreComing);
self.connectedService = aNetService;
if (!moreComing) {
self.connectedService.delegate = self;
[self.connectedService resolveWithTimeout:30];
}
}
紧接着它触发下一个委托(delegate)方法 - (void)netServiceDidResolveAddress:(NSNetService *)sender
。
这里我不知道它是否已连接,在 sender
上找不到任何连接方法 och 连接状态。
所以我尝试写入输出流:
[self.connectedService getInputStream:&istream outputStream:&ostream];
NSString *test = @"test";
NSData *data = [test dataUsingEncoding:NSUTF8StringEncoding];
[ostream write:[data bytes] maxLength:[data length]];
同时使用 [sender setTXTRecordData:data];
更新 TXTRecordData。我没有收到任何错误,我的 Mac 应用程序也没有任何反应。 Mac 应用程序具有委托(delegate)方法 - (void)netService:(NSNetService *)sender didUpdateTXTRecordData:(NSData *)data
。
我不知道怎么办。我想我遗漏了什么,但我不知道它是在 Mac 应用程序还是 iPhone 应用程序中。我想我首先需要以某种方式从 iPhone 应用程序连接到 Mac 应用程序,然后在 Mac 应用程序中添加一些监听连接的东西。
最佳答案
不要相信苹果声称的一切,
使用 NSNetworkService
设置流有很多问题。
如果您执行以下操作,它将起作用:
首先获取一个端口来发布网络。不要自己选择端口。
然后您可以使用该端口来发布网络。
获取客户端流:
[nService qNetworkAdditions_getInputStream:&istream outputStream:&ostream];
很多程序员犯的错误是通过自己选择端口然后打开流来发布网络
[nService qNetworkAdditions_getInputStream:&istream outputStream:&ostream];
流不会打开....
结论:通过首先获取一个端口然后使用类似的东西来发布:
self.netService = [[NSNetService alloc] initWithDomain:@"local" type:@"_xxx._tcp." name:serviceName port:(int) self.port];
open streams with
CFStreamCreatePairWithSocket(kCFAllocatorDefault, nativeSocketHandle, &readStream, &writeStream);
open streams with (you open a connection here)
EchoConnection * connection = [[EchoConnection alloc] initWithInputStream:( NSInputStream *)readStream outputStream:( NSOutputStream *)writeStream];
[self.connections addObject:connection];
然后浏览并添加服务
然后从您浏览过的服务中打开所需服务的流
[nService qNetworkAdditions_getInputStream:&istream outputStream:&ostream];
(and open them with [istream open] and [ostream open])
关于iphone - 通过 NSNetService 连接并发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12055916/
我正在使用 NSNetServices 进行简单的 bonjour 广播。当我在应用程序启动/退出时启动和停止 bonjour 共享时,一切都运行良好。但是,如果我使用 stop 方法调用关闭 bon
我在 Mac 应用程序中托管服务并与 iOS 应用程序连接。虽然 iOS 应用程序会找到该服务,但该服务不包含任何地址,因此我无法连接套接字。 这是我在 Mac 上的托管代码: - (void)sta
我正在尝试在 iOS 设备和 Mac 之间建立 Bonjour 连接。发现彼此效果很好,但我在使用 setTXTRecordData: 时遇到问题.它总是失败(BOOL 返回 NO)... _serv
我正在创建一款可以通过 Wi-Fi 在 iPhone 上玩的棋盘游戏。 当设备A邀请设备B玩时(尝试解析B发布的NSNetService),设备B可以接受或拒绝。 如果 B 拒绝,A 就会收到通知,一
我正在开发一个供我自己使用的小型 iOS 应用程序(至少最初是这样),我想我会使用 Bonjour 来配置两个 iOS 设备之间的网络。我的服务器的接口(interface)定义 NSNetServi
我需要找到一种方法来观察我的应用何时停止通过 bonjour 发布服务。这通常发生在设备接到电话或某些此类中断时。 背景: 我正在使用 GCDAsyncSocket 在同一网络中的 2 台设备之间为播
我正在开发无线应用程序,我的问题如下所示:1)是否有可能使用 NSNetServices 在设备之间来回发送数据,如点对点,Apple 的 Bonjour 示例仅适用于本地网络,这意味着如果 NSNe
dictionary(fromTXTRecord:) 的输入来自网络,可能来自应用程序外部,甚至是设备。然而,Apple 的 docs 说: ... Fails an assertion if txt
我正在尝试使用 NSNetService 在 iPhone 应用程序和 Mac 应用程序之间建立通信。 到目前为止,我已将 Mac 应用程序设置为发布 iPhone 应用程序可以发现的 NSNetSe
请原谅我的 iPhone/Objective-C 新手身份! 我已经使用 NSNetServiceBrowser 找到了我的 HTTP 服务器,但现在我只想找到该服务的 IP 地址和端口。 我的委托(
我正在使用 NSNetService 通过 Bonjour 进行广播。但是当我想停止它时,我使用[netService stop],其中netService是我的NSNetService。它只是不会停
我对 Objective-C/Cocoa 有点陌生,我正在尝试编写一个 bonjour 服务器客户端应用程序。因为我没有太多经验,所以如果您的回复还可以包括如何操作的解释,而不仅仅是代码,我将不胜感激
我正在尝试模仿 iPhoto 共享,并已使用 iPhoto 服务名称“_dpap._tcp”发布该服务。 iPhoto 看到我的虚假“共享”,但它呈灰色。我正在观察网络流量,看看 iPhoto 是否正
最近,我在解析 NSNetService 时遇到了问题。 我发布了一个类型为 _http._tcp. 的 NSNetService,就像一个 http 服务器。否则,在另一台设备上,我开始搜索这项服务
我一直在尝试在 iOS 上制作一个简单的应用程序,它将接收消息,然后根据该消息执行操作(目前我只想通过 NSLog 显示它) .我可以连接到该服务,但该服务似乎从未收到任何东西。这是我的 .h 文件:
我有一个代码 CocoaHTTPServer它使用 Bonjour 发布服务。而 tt 为此使用 NSNetService。 如果您定义域“.local”,它工作正常(在 OS X 和 iOS 上)。
在 iOS 上,我正在使用 bonjour 查找其他设备,以便我可以在两者之间传输数据。我计划将 NSNetService 用于 bonjour,将 CocoaAsyncSocket 用于流媒体。 在
我正在制作一个包含两个组件的应用程序,一个 iPhone 组件和一个 Mac 组件。他们应该通过 bonjour 相互交流。我在Mac端使用以下代码来查找服务的端口: NSSocketPort *so
在我的 iPhone 应用程序中,我正在发布 bonjour 服务并使用以下委托(delegate)方法: - (void)netServiceDidPublish:(NSNetService *)n
我正在为 iPhone 和 iPad 开发一款 3D Wi-Fi 多人游戏,而不使用任何游戏引擎。我引用了“ radio 话 ” 的设备连接示例本地Wi-Fi多人游戏 (示例代码链接:WiTap)
我是一名优秀的程序员,十分优秀!