问题标签 [nsnetservicebrowser]

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.

0 投票
1 回答
319 浏览

ios - 在 iOS 7 上通过 NSNetService 连接到 BLE 设备并发送/读取数据

我有一个 iPhone 应用程序,它通过NSNetService. 现在我想添加对蓝牙的支持。所以我想通过蓝牙(BLE)发现并连接到设备,连接时我想通过发送/接收数据NSNetService,所以我重用现有代码......

这在 iOS7+ 上可行吗?任何示例/提示将不胜感激。

0 投票
0 回答
651 浏览

ios - NSNetServiceBrowser 查找网络上的任何设备

根据标题:

我想知道 IOS 如何能够在网络上找到非 bonjour 的设备。具体来说,我需要找到一种控制设备,该设备将在未来具有适当的 Bonjour 宣布代码,但消费者手中已经有大量此类设备,而且固件更新不是一种选择。

那么如何使用 Bonjour 或 NSNetServiceBrowser 或其他与苹果商店兼容的库来发现网络上的旧设备?

IE - 在 android 中,我 ping 了网络上所有可用的 IP,并读取了专有 mac 前缀的 arp 表。据我了解,这在 mac 商店标准中是不允许的,因为我将使用“不公开”的库

我对 IOS 编程很陌生,希望得到任何建议或帮助。谢谢?

0 投票
1 回答
3052 浏览

ios - 连接后立即断开与服务器的连接

我使用 GCDAsyncsocket 库编写了一个单例类,以使用 Bonjour 与具有相同服务的任何其他设备建立连接。

在一个设备上,我使用它的方法“ startPublishing ”使其成为主机(服务器),从另一个设备(客户端)上的应用程序我调用“ StartBrowsing ”来找出网络中的可用设备。当用户选择该网络中的任何服务时,我正在调用方法“ initConnectionWithService ”,该方法通过解析要连接的 NetService 地址来启动连接流。

BonjourUtilClass.h

BonjourUtilClass.m

但是,在执行上述事情时,发生了非常意想不到的事情,充当客户端的设备正在didConnectedToHost中获得回调,并且立即,另一个回调即将到来,即在didDisconnected

客户端设备上的日志

服务器设备上的日志

0 投票
1 回答
71 浏览

ios - iOS,获取可用 Bonjour 服务的“快照”

对于我的 iOS 应用程序,我想在启动时检查是否有使用 Bonjour 广告的特定服务,如果有,请连接到该主机(而不是指定的 URL)。

我在我的代码中实现了:

如果找到服务,didFindService则调用并通过 NSNotificationCenter 我得到结果服务主机名和端口并照常进行。

如果未找到服务,我的应用程序将保留在那里......等待......(我知道它符合预期)。

有没有办法说在例如 5 秒“中止”之后?不知何故,我需要打电话,[self.serviceBrowser stop]但我没有看到这样的选项。我应该如何才能做到这一点?

0 投票
0 回答
1152 浏览

objective-c - Bonjour:使用服务名称和类型在 iOS/Objective-C 中发布 NSNetService

我已经看到NSNetService可以发布一个 Bonjour 服务,设置服务名称和服务类型。我愿意:

现在,当我查看像TildeSoft 的 Bonjour Browser这样的服务浏览器时,我可以看到发布的 NetService 如下所示:

在此处输入图像描述

我可以看到我servicename在服务类型下有命名服务myservicetype._tcp.

那么如何发布一个Bonjour名称类似于AirTunes类型的网络服务_airport._tcp,我的意思是我只能按类型发布我的服务:myservicetype._tcp.

0 投票
1 回答
310 浏览

ios - 了解 bonjour 服务的状态

我正在使用NSNetServiceNSNetServiceBrowser在网络上发布和扫描 Bonjour 服务。实施工作正常,服务在网络上找到并且它们能够通信。我目前正在尝试了解框架的生命周期以及到目前为止我所拥有的:

如果我在适配器开启的情况下启动服务,就会发生这种情况。现在我需要随时了解该服务是否在网络上被积极宣传;也就是说,如果其他设备能够找到它。所以我通过关闭 Wi-Fi 适配器来测试它:

然后我重新打开适配器:

问题是打开或关闭适配器绝对没有区别,所以我无法寻找模式。有没有其他方法可以捕捉这些事件?

编辑:它变得最糟糕。即使我在两个适配器都关闭(飞行模式)的情况下启动服务netServiceDidPublish:仍然会被调用。到目前为止,似乎netServiceDidNotPublish:仅在我尝试注册同一服务两次时才被调用。这对我来说非常违反直觉;也许服务已发布到适配器,但没有发布到网络,因此这些回调非常具有误导性。在这一点上,我无法知道该服务在网络上是否可见。

0 投票
0 回答
126 浏览

ios - NSNetServiceBrowser 无法“偶尔”找到 Apple TV

NSNetServiceBrowser用来查找NSNetService过度连接Apple TVbonjour现在我的代码几乎每次都能正常工作。但是每隔一段时间(10 次中的 1 次)无法NSNetServiceBrowser找到或花费大量时间来找到它。NSNetServiceApple TV

一旦NSNetServiceBrowser无法检测到Apple TV,我必须重新启动,Apple TV然后一切都开始正常工作。

我无法理解问题是什么以及重新启动如何Apple TV解决它。因此,我正在寻找任何指导或建议来确定问题所在。

苹果电视的代码:

iOS设备代码:

更新:当我尝试两个 iOS 设备之间的连接时,它永远不会发生。在这种情况下,我获得了 100/100 次连接。但是一旦我介绍了 Apple TV,我就开始遇到那些找不到电视的场合。

0 投票
0 回答
539 浏览

ios - 如何在快速使用 NSNetServiceBrowser 解析服务时刷新 DNS 缓存?

我正在使用 NSNetServiceBrowser 解析 udp 服务。它工作正常,但如果我断开我的服务,它也会发现它。我得到了一个链接,它说它在一段时间内仍然可见,因为 DNS 记录达到了它的生存时间间隔并消失了。链接 - https://developer.apple.com/library/prerelease/content/documentation/Cocoa/Conceptual/NetServices/Articles/faq.html (第 4 点)

如何刷新缓存以使服务无法访问?

0 投票
4 回答
6492 浏览

ios - Swift 3 如何解析 NetService IP?

只是在 swift 3 中尝试 Bonjour

这是我的代码,我可以接收委托

这是我的结果

netServiceDidResolveAddress 服务名称 Webber 的 Mac mini 类型 _myapp._tcp.,端口 5678,地址可选([<1002162e c0a80205 00000000 00000000>,<1c1e162e 00000000 fe800000 00000000 00bce07ad 24b0040>])

c0a80205 是我要找的 IP => 192.168.2.5

地址是 [Data] ,Apple 说

服务的地址。这是一个 NSData 实例的 NSArray,每个实例都包含一个适合与 connect(2) 一起使用的 struct sockaddr。如果没有为服务解析地址或尚未解析服务,则返回一个空的 NSArray。

我仍然很困惑为什么 Data 不能使用 .btyes ?正如苹果所说“这是一个 NSArray 的 NSData 实例”但我不能像 NSData 一样使用它

以及如何将地址解析为可读的 IP 字符串?

我之前尝试过这个,但没有得到结果,因为我除了......

任何建议都会有所帮助,谢谢

0 投票
1 回答
157 浏览

ios - Bonjour/NSNetService 写入 NSOutputStream 的数据永远不会到达另一端(includesPeerToPeer = true)

我有一个通过 Bonjour/NSNetService 建立点对点连接的 iOS 应用程序。(基于 WiTap 示例代码)

在某些情况下,两台设备在几秒钟后都不会再接收数据,而它们仍然能够写出数据(即没有报告错误)。

写入 NSOutputStream 的数据永远不会到达另一端的 NSInputStream。

奇怪的是,在建立连接后发送和接收工作。几秒钟后它似乎变坏了。

如果我设置 includesPeerToPeer = false 它就不会再发生了。有没有人有同样的问题?我需要使用点对点,因为需要使用蓝牙。

谢谢