问题标签 [nsnetservice]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - WiFi上的NSNetService而不是蓝牙
我有 2 个 iOS 设备和一个启动或连接到 NSNetService 的应用程序。
当两个设备都打开蓝牙时,数据流将自动通过蓝牙接口完成。
我不希望这样,我希望两个设备都通过 WiFi 进行通信。有没有办法强制 NSNetService 通过 WiFi 进行通信?
谢谢
cocoa-touch - 使用 NSNetService 同步 Bonjour 解析(为什么从运行循环返回控制需要这么长时间?)
我正在尝试同步对服务名称进行 Bonjour 解析,因此我试图弄清楚如何正确等待 NSNetService 的 netServiceDidResolveAddress() 调用。
我的代码如下所示:
这是我处理解析成功的函数:
只要我的代码在 resolve 事件出现后继续运行一秒钟左右,我就会很高兴。
实际发生的事情是解析发生得很快,我看到 netServiceDidResolveAddress() 中的代码完成了,但是在控制从 runUntilDate 返回之前一直有一个不受欢迎的 5-6 秒等待,我看到“...(运行后循环)调试语句。
我环顾了几个留言板,看到了类似的问题,但他们的解决方案(如使用 CFRunLoopStop)似乎没有任何效果。
这是我收到的日志记录示例:
如果有人可以告诉我使用 NSNetService 解析来获得同步结果的不同方法,或者重构我的 runloop 相关代码以避免这种(似乎是操作系统创建的)5-6 秒延迟,我将不胜感激。
iphone - 使用 NSNetServices 从一台 iPhone 设备向另一台设备发送短信
我想使用 NSNetServices 将文本消息从一台 iPhone 设备发送到另一台 iPhone 设备或模拟器。谁能知道如何解决这个问题?
cocoa - 停止方法调用后 NSNetServices 仍然存在?
我正在使用 NSNetServices 进行简单的 bonjour 广播。当我在应用程序启动/退出时开始和停止 bonjour 共享时,一切都运行良好。但是,如果我使用 stop 方法调用关闭 bonjour,即使在调用 netServiceDidStop: 委托消息后,我的应用程序似乎仍然在广播死服务,这会阻止服务重新启动,直到重新启动应用程序之后。Apple的文档使它看起来非常简单,只需根据需要发布或停止......我错过了什么吗?
objective-c - 打开流后 NSNetServiceBrowser didRemoveService 需要更长的时间
我有以下代码用于发现网络上的服务:
这导致调用这两种方法(查找服务和删除服务):
这工作正常。当我关闭设备时,我立即收到didRemoveService呼叫。
但是,当我打开设备的流(输入、输出或两者)时:
NSNetServiceBrowser 突然花了将近一分钟的时间检测到我关闭了设备(调用didRemoveService
需要一分钟)。
一旦我删除它们,我不与之通信(打开流)的设备仍然会调用didRemoveService 。
更新: 这是与我的问题相关的更多信息。
我使用 Wireshark 进行了跟踪,并注意到以下内容:
我在 iPad 模拟器中启动我的应用程序,该应用程序启动 NSNetServiceBrowser 并检测打印机。之后,它打开设备的输入/输出流(通过机场快线、usb)。打印机正在向我发送状态更新,当我点击应用程序中的测试按钮时,打印机开始打印。在 Wireshark 中,我按预期看到了与打印机的所有通信。
现在,当我在 iPad 上启动完全相同的应用程序(并让 iPad 模拟器运行)时。该应用程序也会启动 NSNetServiceBrowser,并检测打印机。打印机没有向我发送状态更新,当我点击测试按钮时,打印机没有打印。在 Wireshark 中,我看到了通信。打印机或机场收到我的命令并发送一个 ACK 包。
一旦我杀死 iPad 模拟器应用程序,打印机就会开始打印我使用 iPad 发送的命令。似乎打开一个套接字会阻止所有 bonjour 事件,我该如何防止这种情况发生?
ios - 在 iOS 设备中创建 Bonjour AirPrint 服务
所以我想出要发布(宣布服务)到 iOS 设备作为打印机,我使用 NSNetService 并将类型设置为_ipp._tcp
.
但为了被认可为 AirPrint 打印机,要求包括:
- AirPrint 使用 IPP 进行打印管理。
- AirPrint 侦听 mDNS (Bonjour/Avahi) 以发现打印机。
- AirPrint 要求
_universal
在公告中出现子类型,_ipp
然后才会考虑列出打印机。 - AirPrint 需要额外的 TXT 记录“URF”存在且非空,然后才会考虑列出打印机。
- 虽然这种 URF 格式(见下文)似乎是 Apple 未来的选择,但当前所有支持 AirPrint 的应用程序似乎都以 PDF 格式发送打印数据。
- 当打印机受用户名/密码保护时,iTunes/AirPrint 守护程序将发送 TXT 记录“air=username,password”。
所以我想弄清楚如何发布子类型并在 NSNetService 下发布 TXT 记录,这是我无法做到的。有人有想法么?
iphone - iOS 上的 NSNetServiceBrowser/Bonjour 问题
我正在为我一直在从事的 iOS 项目开发的应用程序中通过 WiFi 使用 Bonjour(准确地说是 NSNetServiceBrowser)。
然而,尽管注意到为什么 NSNetServiceBrowser 在 iPhone OS 中找到未发布的服务?我在使用 NSNetSericeBrowser 时仍然遇到很多困难。
我的设置如下:
- 使用运行 iOS 4.5.3 的 iPad。
- 使用 AirPort Express 作为接入点/路由器。
- 在连接到网络的 Mac 上运行 dns-sd -B _serviceName 工作正常——也就是说,所有发布和停止的调用都会立即反映在桌面上。
但是,我遇到了以下问题:-
- 发布了很长时间(大约 15 分钟+)的服务往往不会在客户端上被删除,即使它们从 Mac 上消失了!(即 didRemoveService 不会被调用)。
- 有时网络上的其他人看不到已发布的服务,即使它们出现在 Mac 上!(即没有调用 didFindService)——这可能与下面的第 3/4 点有关......如果应用程序在 iPad 连接到网络之前开始运行(和搜索),那么它不会搜索新网络适当地。
- 如果设备在发布服务后更改网络会发生什么?我发现 Bonjour 不会在新网络上重新发布服务 - 怎么能强迫这种情况发生?
- 如果设备在搜索服务时更改网络会发生什么?我发现这也会导致问题,并且往往会导致找不到会话(未调用 didFindService)。
我遇到的问题很奇怪,因为 Bonjour 90% 的时间都在工作……只是那 10% 的时间破坏了我的应用程序的可靠性!令人讨厌的是,上述所有问题都可以通过双击主页按钮并强制关闭应用程序,然后重新运行来解决。再次运行后,它总能找到正确的会话或正确发布。
回避此问题的一种方法是在无线网络发生更改时拆除并重新启动 NSNetServiceBrowser ......但这似乎非常混乱且不必要。令人沮丧的是,Bonjour 是一个高级 API,没有任何实际的调整和测试选项。
有什么想法可以解决问题 1-4?
谢谢!
ios - Apple Bonjour:我如何判断哪个已发布服务是我自己的?
我有两台 iOS 设备使用 Bonjour API 成功地找到彼此,但由于它们同时发布和浏览,它们也看到自己出现在可用服务列表中。每个端点必须有一些信息可以用来确定服务是他们自己的,并将其从他们的列表中排除...我确定我只是在某个地方错过了它 - 有什么想法吗?
我使用了文档中的示例,并进行了一些小改动。
bluetooth - 蓝牙,带 Bonjour 网络的 Wifi
如果我在(基于 Bonjour 的网络)Iphone 应用程序中发布 NSNetService,则网络将在我的应用程序中使用
objective-c - 未归档 NSMutableDictionary 或 NSData 时出错?
我正在尝试通过 wifi/蓝牙将信息字典从一部 iphone 发送到另一部 iphone,为此我实现了 CFnetwork 和 NSNetservice 概念。我在 Reciver 端收到了数据。
我做了如下代码....
接收端
我在 Receiver Side.that 中获得了字节格式的数据。我无法在 Receiver 端取消存档此数据。如果我试图将其取消存档为这样的字典格式
但不幸的是,我无法以字典格式取消存档此数据。我收到线路错误 NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
我找到了一些将字节数据转换为字符串格式的代码,如下所示
但我的问题是如何取回同一个字典。为什么在未归档时间出现错误?