目前我正在使用NetServiceBrowser查找 Bonjour 服务并解析相应的地址和端口。
为了NWBrowser简化我的代码,我偶然发现它似乎提供了一个非常简单的界面来处理 Bonjour 发现。
但是,browseResultsChangedHandler返回包含 enum case 端点的结果和更改service。我试图从结果中获取地址和端口信息,但似乎NWEndpoint必须是枚举类型 .hostPort。
理想情况下,我会使用端点连接到服务器NWConnection,但是,我使用的是另一个不NWEndpoint直接处理 的库。
是否有(简单的)方法可以从NWEndpoint.service结果中获取地址和端口信息?
import Foundation
import Network
let browser = NWBrowser(for: .bonjour(type: "_http._tcp", domain: ""), using: NWParameters())
browser.browseResultsChangedHandler = { (results, changes) in
print("Results:")
for result in results
{
if case .service(let service) = result.endpoint
{
debugPrint(service)
}
else
{
assert(false, "This nevers gets executed")
}
}
print("Changes:")
for change in changes
{ …Run Code Online (Sandbox Code Playgroud) 设置多点连接(使用 Bonjour)也会触发相同的错误。我用于启动 Bonjour 浏览和 Multipeer Connectivity 的代码是从 Apple 示例代码修改而来的,并且在 iOS 13 下运行良好。
是否有一种简单的方法可以扫描给定的网络以获取Bonjour/Zeroconf服务?
我有一套计算机(Linux,Windows,Apple),并希望在我的Intranet中自动生成所有可用的支持Zeroconf的网络节点的列表.
我正在构建一个原生的Bonjour/Zeroconf库,需要构建DNS查询记录以广播到其他机器.我曾尝试通过Erlang源代码查找,但由于我对Erlang相对较新,因此它在所有inet_XXX.erl和.hrl文件的内容中变得非常密集.我有一个侦听器,用于接收和解析DNS记录有效负载,我只是无法弄清楚如何创建查询记录.我真正需要知道的是我需要传递给inet_dns:encode()来获取我可以发送的二进制文件.这是我想要做的.
{ok,P} = inet_dns:encode(#dns_query{domain="_daap._tcp.local",type=ptr,class=in})
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误
10> test:send().
** exception error: {badrecord,dns_rec}
in function inet_dns:encode/1
in call from test:send/0
11>
Run Code Online (Sandbox Code Playgroud) 我试图弄清楚这是否可行,但是通过Visual C++宣传Bonjour服务的最简单方法是什么?
我最近发现,通过Ubuntu的同理心客户端,存在一种协议,使用户能够与他的实际本地网络上的任何人交谈.似乎同理心称这项服务为" 人们附近 "和Windows" 我附近的人 ".
经过一些研究后,我发现了更多信息:似乎"协议"被称为Avahi(或Apple的Bonjour/Salut(?)),允许用户连接到网络上的用户,打印机和文件.
我的问题:
我目前正在开发一个跨平台的应用程序(Win/OSX/iOS),它有一个C++(带有Boost)后端.在iOS和OSX上,我使用Cocoa Net服务浏览器委托功能通过mDNS发现嵌入式设备,然后将信息传递到后端以创建与之通信所需的对象.
我想对我的Windows MFC前端采取类似的方法,我发现这篇文章看起来完全符合我的要求.然而,似乎使用Bonjour SDK有一些非常讨厌的副作用 - 强迫你到MFC的静态链接,在我的情况下,我可以让它正确链接的唯一方法是根本不使用调试DLL,这是不理想的.
所以,Bonjour SDK对我来说并没有什么好处,因为它对我的项目施加了太多限制.使用Cocoa,我实际上只使用了很少的功能 - 实际上只有didFindService和netServiceDidResolveAddress.我想要做的就是找到给定类型的设备并获取其IP地址.
任何人都可以建议另一种解决方案,这将与Windows上的MFC前端一起使用吗?
我想开发一款可以在Blackberry PlayBook上运行的Android应用程序.应用程序需要在运行相同应用程序的本地网络上查找其他设备.
我正在考虑实施Bonjour/Zeroconf/jmDNS协议来寻找设备,但......
我刚学会了android权限
android.permission.CHANGE_WIFI_MULTICAST_STATE
Blackberry或PlayBook不支持.(需要首选jmDND(Bonjour)协议才能工作.)
https://bdsc.webapps.blackberry.com/android/apisupport/
你能给我一些建议吗?这是在PlayBook上实现这一目标的最佳方法.还有其他选择吗?
如果使用原生SDK或Adobe AIR构建,是否可以使用Bonjour?
我试图在didFindService函数中获取TXTrecords,但我发现该值为null.
你有什么想法解决我的问题吗?
- (void)netServiceBrowser:(NSNetServiceBrowser*)netServiceBrowser didFindService:(NSNetService*)service moreComing:(BOOL)moreComing {
[self.services addObject:service];
NSDictionary* dict = [[NSNetService dictionaryFromTXTRecordData:[service TXTRecordData]] retain];
MyTreeNode *node = [[MyTreeNode alloc] initWithValue:[service name]];
NSString* info = [self copyStringFromTXTDict:dict which:@"info"];
if([info isEqualToString:@"child"]) { // info == null and dict == null??
[treeNode addChild:node];
}
[info release];
if (!moreComing) {
[self sortAndUpdateUI];
}
}
Run Code Online (Sandbox Code Playgroud) 尝试使用pybonjour但不确定它是否是我需要的.https://code.google.com/p/pybonjour/
我希望能够发现自动出现在我的网络上的iOS设备,稍后将基于此运行脚本,但首先我想在我的wifi网络上出现/消失后立即发现iOS设备.
那么问题是,我该怎么做?在安装了python27和pybonjour软件包的windows机器上运行时,这两个示例在pybonjour页面上运行,但是我使用我的网络中包含的脚本运行什么命令来发现iOS设备?或者这个只运行在我的电脑上运行此脚本的发现服务!
如果我走向错误的方向请告诉我,我似乎无法找到关于此包的文档!
python browse_and_resolve.py xxxxxx
Run Code Online (Sandbox Code Playgroud)
Thx Matt.
更新中...
本文和浏览器在查找我需要搜索的服务时很有帮助,http://marknelson.us/2011/10/25/dns-service-discovery-on-windows/.
例; (这发现了我的苹果电视,不在家里,所以无法检查iphone的名称!我假设是iphone!
python browse_and_resolve.py _appletv._tcp
Run Code Online (Sandbox Code Playgroud)
此外,如果您有Windows实用程序dns-sd.exe,它将搜索网络上可用的所有服务.我用它来找到我要找的东西.
dns-sd -B _services._dns-sd._udp
Run Code Online (Sandbox Code Playgroud)
更新中...
"Bonjour有两种使用方式: - 发布服务 - 检测(浏览)可用服务".
对于我想做的事情,我认为它不会起作用,因为ipad/iPhone不会宣传服务,除非我正在运行一个宣传一个的应用程序(或越狱我的iPhone/ipad然后ssh将打开) .还有什么想法吗?