我想结合使用CFNetwork和Bonjour,以便能够在我的iPhone应用程序和Mac应用程序之间进行通信.iPhone上的应用程序只有一个按钮.然后在Mac应用程序上,会有一个标签.如果按下iPhone应用程序上的按钮,则Mac应用程序上的标签会发生变化.
是否有可以执行此操作的示例代码?如果没有,有人可以引导我朝着正确的方向前进吗?
谢谢!
所以它是一个远景,我将从那开始.
是否可以单独在javascript中发现bonjour广告的HTTP服务?
为什么这会有用?想象一下本地服务正在寻找一些数据(例如您当前的纬度/经度),数据通过网络服务公开并由Bonjour Zeroconf做广告.一个(远程)网站可能想知道你当前的纬度/经度,而不是必须知道你正在运行MyGPSserverVersion2,该网站可以使用javascript搜索本地bonjour _Compatible_location_services._tcp,然后一旦有了IP地址就继续.
如果这是不可能的(我认为可能就是这种情况,Javascript是相当受限制的)然后有什么障碍,是否有人对如何克服它们有任何想法?
我正在尝试使用Bonjour构建一个演示项目,遵循本教程,但我收到此错误:
错误:dns_sd.h:没有这样的文件或目录
它出现在这一行:
#include <dns_sd.h>
Run Code Online (Sandbox Code Playgroud)
我从哪里获得该头文件?
请原谅我的iPhone/Objective-C新手状态!
我发现我的HTTP服务器使用NSNetServiceBrowser,但现在我只想要找到服务的IP地址和端口.
我的委托方法中有以下内容:
NSNetService* server = [serverBrowser.servers objectAtIndex:0];
NSString *name = nil;
NSData *address = nil;
struct sockaddr_in *socketAddress = nil;
NSString *ipString = nil;
int port;
uint i;
for (i = 0; i < [[server addresses] count]; i++)
{
name = [server name];
address = [[server addresses] objectAtIndex:i];
socketAddress = (struct sockaddr_in *)
[address bytes];
ipString = [NSString stringWithFormat: @"%s",
inet_ntoa (socketAddress->sin_addr)];
port = socketAddress->sin_port;
NSLog(@"Server found is %s %d",ipString,port);
}
Run Code Online (Sandbox Code Playgroud)
但是,即使调用了委托,也永远不会输入for循环.有任何想法吗?谢谢!
升级到Xcode 6.3之后,我现在得到一个错误的警告面板:The Bonjour service could not be resolved. The server may be temporarily unavailable. Contact your system administrator.我该如何解决这个问题?
是否可以从命令行使用Bonjour?例如,如果我想注册一个服务,我输入类似的东西:bonjour -register service_name port.然后Bonjour为我的服务分配一个免费的IP.或者,例如,如果我想查看可用服务列表,我输入类似:bonjour -showServices.然后我获得所有可用服务的列表及其名称,IP地址和端口.这样的事情存在吗?
我对现有文档感到困惑.例如这里,在文档的开头我看到:
要注册您的服务,请调用DNSServiceRegister.
我应该在哪里打电话?在命令行?在Java?在C++中?在python中?没有提供这种背景有点奇怪.
一般来说,我只找到关于zeroconf和Bonjour的一般信息(它应该做什么).但我找不到具体而简单的东西.像"Hello World"一样使用Bonjour的例子.
任何人都可以帮助我吗?
我正在尝试在我公司的专有硬件设备上执行服务发现,该设备拥有自己的WiFi网络,并在该网络上宣传一项bonjour服务.当我连接到那个WiFi网络时,我正在使用NSD来发现该服务并解决它.
代码非常简单,通常效果很好而且很快.除了我有一个相当反复出现的问题(10次尝试中有5次)到目前为止本地化我的三星S8 +.到目前为止无法在S6或Pixel XL上重现.
问题是DiscoveryListener除了onDiscoveryStarted()之外从未做过任何事情,它只是永远运行.如果我杀了应用程序并重新开始,有时候它会继续挂起.
这就像有一个被阻塞的线程或东西,但是在日志中没有有用的信息(我能找到),而且我还没有发现任何东西可以锁定,因为我可以做些什么来从中恢复.
我添加了一个超时,它将在30秒后停止监听器,但通常在我重试之后它仍然无效.
服务发现过程包含在LiveData中,LiveData在活动时启动.
const val SERVICE_TYPE_FOO = "_foo._tcp."
private val serviceDiscoveryListener = ServiceDiscoveryListener()
override fun onActive() {
super.onActive()
stopRunnable = StopDiscoveryRunnable()
nsdManager.discoverServices(
SERVICE_TYPE_FOO,
NsdManager.PROTOCOL_DNS_SD,
serviceDiscoveryListener
)
handler.postDelayed(stopRunnable, SERVICE_DISCOVERY_TIMEOUT_MS)
}
private lateinit var stopRunnable: Runnable
private inner class StopDiscoveryRunnable : Runnable {
override fun run() {
try {
nsdManager.stopServiceDiscovery(serviceDiscoveryListener)
Timber.w("service discovery timed out")
postValue(ServiceDiscoveryState.Error)
} catch (e: Throwable) {
// no-op
}
}
}
Run Code Online (Sandbox Code Playgroud)
听众很简单......
private inner class ServiceDiscoveryListener : NsdManager.DiscoveryListener {
override fun onServiceFound(serviceInfo: NsdServiceInfo?) …Run Code Online (Sandbox Code Playgroud) 我有一些我想用zeroconf看到的应用程序.
Python或sh是首选.特定于操作系统的建议欢迎使用Linux和OS X.
我正在尝试检测连接到无线网络的Apple设备.使用Bonjour相对简单,但我也试图检测它是什么类型的设备.比如,MacBook Air,MacBook Pro,MacPro,iPhone,iPod或iPad.
我发现Bonjour对MacBook和MacPros的请求包括对查询的"附加部分"响应,其中包括模型:
;; ADDITIONAL SECTION:
Q9550._device-info._tcp.local. 10 IN TXT "model=MacPro3,1"
Run Code Online (Sandbox Code Playgroud)
和
;; ADDITIONAL SECTION:
Air._device-info._tcp.local. 10 IN TXT "model=MacBookAir4,2"
Run Code Online (Sandbox Code Playgroud)
通过测试iPhone(3GS和4),iPod touch和iPad2,所有iDevices只响应他们的名字:
;; ANSWER SECTION:
111.1.168.192.in-addr.arpa. 10 IN PTR gmPad2.local.
Run Code Online (Sandbox Code Playgroud)
显然,该名称可能无法反映该设备.所以,我不想尝试从名称中推断出设备的类型.有没有人知道检测iDevice类型的任何其他方法?
编辑:为了清楚,我使用的命令是:dig @ 224.0.0.251 -p5353 -x 192.168.1.111 ...替换Apple设备的IP地址
我已经安装了模板Ionic 2应用程序并想要添加NPM包 bonjour
在我的组件中安装并包含这样的包之后:
var Bonjour = require('bonjour');
var bonjour = new Bonjour();
Run Code Online (Sandbox Code Playgroud)
该应用程序将无法运行说明'找不到模块dgram'
该应用程序同时安装了bonjour包和bonjour类型.
问题
应用程序找不到位于@ types/node文件中的模块dgram.该项目正在运行TS 2.4.2 ,不需要任何对@types的引用,这应该自动获取.
我试过了什么
我尝试以多种方式包含@types文件夹,方法是在ts.config.json文件中设置typeroots或types.这并没有改变任何事情.
我尝试指定类型:
"types": ["node", "bonjour"]
Run Code Online (Sandbox Code Playgroud)
我尝试重新安装所有节点模块并清除缓存
我尝试在require语句上面的组件中包含一个引用路径:
/// <reference path="node_modules/@types/node/index.d.ts" />
var Bonjour = require('bonjour');
var bonjour = new Bonjour();
Run Code Online (Sandbox Code Playgroud)
这一切都没有帮助.有关如何使我的应用程序正确加载此模块的任何想法?