除了JMDNS之外,还有其他任何用于bonjour/zeroconf的Java库吗?
我正在使用Droid/Android 2.0.1并遇到一个显然很多人遇到的问题:我无法使用我所知道的一个纯Java zeroconf库jmDNS来发现服务.(Apple的Bonjour,虽然它适用于Linux和Windows Java,但我相信由于依赖本机代码而难以移植到Android.)
我可以创建服务,但不能发现它们.我想弄清楚发生了什么.
这里有一份持续的问题报告; 与多播和IPv6有关,但似乎也在抛弃jmDNS的用户:http://code.google.com/p/android/issues/detail? id = 2323
知道为什么这个人可能会成功吗?请参阅错误报告中的注释22.(我是SO的新手,因此无法发布多个网址.)
我测试了他们的代码,但没有运气.
有没有人使用jmDNS或其他库在Android上成功完成zeroconf服务发现?
我的发现问题是否可能与IPv6组播问题有关?
我想在我的Android应用程序上实现bonjour/zero conf.我正在使用jmDns库来搜索所有可用的设备.以下是我用于搜索同一网络中的设备的代码:
public class ListDevices extends ListActivity {
JmDNS jmdns;
JmDNSImpl impl;
MulticastLock lock;
protected ServiceListener listener;
protected ServiceInfo info;
public ListView lv;
public ArrayList<String> deviceList;
public int cancel = 0;
public final static String TAG = "ListDevices";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
deviceList = new ArrayList<String>();
showAllPrinters();
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, deviceList));
lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Android Native Service Discovery运行应用程序,但有时当我运行应用程序时,它不会从我的网络中发现所有服务.我使用四个galaxy nexus 运行来自https://github.com/joeluchoa/nsd的代码,并且大多数时候他们每个人同时发现不同数量的服务.
基本上我使用ServerSocket运行服务:
ServerSocket server = new ServerSocket(0);
Log.i(TAG, "IP " + server.getInetAddress()
+ ", running on port " + server.getLocalPort());
Intent intent = new Intent(MySocket.this,
MyPresence.class);
intent.putExtra("PORT", server.getLocalPort());
startService(intent);
Run Code Online (Sandbox Code Playgroud)
然后我使用NsdManager中的registerService方法发布它:
NsdServiceInfo serviceInfo = new NsdServiceInfo();
serviceInfo.setServiceName(Build.SERIAL + "-" + new Date().getTime());
serviceInfo.setServiceType(SERVICE_TYPE);
serviceInfo.setPort(port);
mNsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD,
mRegistrationListener);
Run Code Online (Sandbox Code Playgroud)
要发现服务,我使用NsdManager中的方法discoverServices:
mNsdManager.discoverServices(SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD,
mDiscoveryListener);
Run Code Online (Sandbox Code Playgroud)
使用mDiscoveryListener如下:
mDiscoveryListener = new NsdManager.DiscoveryListener() {
@Override
public void onDiscoveryStarted(String regType) {
Log.d(TAG, "Service discovery started");
}
@Override
public void onServiceFound(NsdServiceInfo service) { …
Run Code Online (Sandbox Code Playgroud) 我有一个开发网络服务器托管为"myhost.local",使用Bonjour/mDNS.服务器正在运行avahi-daemon.
网络服务器也想处理自己的任何子域.例如"cat.myhost.local"和"dog.myhost.local"和"guppy.myhost.local".
鉴于myhost.local位于dhcp的动态ip地址上,是否还有办法将子域的所有请求路由到myhost.local?
我开始认为目前不可能......
http://marc.info/?l=freedesktop-avahi&m=119561596630960&w=2
您可以使用/ etc/avahi/hosts文件执行此操作.或者,您可以
使用avahi-publish-host-name.不,他不行.因为他想要定义一个别名,而不是一个新的主机名.即他只想注册A RR,没有反向PTR RR.但是如果你在/ etc/avahi/hosts中粘贴了一些内容,那么它会注册两者,如果PTR RR是非唯一的,则检测到冲突,这就是别名的情况.
在iPhone上如果我创建自定义服务,例如"_test._tcp.local".在Bonjour我可以通过WiFi或/和蓝牙寻求/广播这项服务.
在Android上有可能吗?
我知道有jmDNS,但从我的理解,它只能通过WiFi /网络, 而不是蓝牙.
谢谢
由Seva Alekseyev编辑,他提供了赏金:我不是经过解决方法(比如Zeroconf sans Bluetooth或Bluetooth sans Zeroconf).我追求真实的东西.
所以它是一个远景,我将从那开始.
是否可以单独在javascript中发现bonjour广告的HTTP服务?
为什么这会有用?想象一下本地服务正在寻找一些数据(例如您当前的纬度/经度),数据通过网络服务公开并由Bonjour Zeroconf做广告.一个(远程)网站可能想知道你当前的纬度/经度,而不是必须知道你正在运行MyGPSserverVersion2,该网站可以使用javascript搜索本地bonjour _Compatible_location_services._tcp
,然后一旦有了IP地址就继续.
如果这是不可能的(我认为可能就是这种情况,Javascript是相当受限制的)然后有什么障碍,是否有人对如何克服它们有任何想法?
是否可以从命令行使用Bonjour?例如,如果我想注册一个服务,我输入类似的东西:bonjour -register service_name port.然后Bonjour为我的服务分配一个免费的IP.或者,例如,如果我想查看可用服务列表,我输入类似:bonjour -showServices.然后我获得所有可用服务的列表及其名称,IP地址和端口.这样的事情存在吗?
我对现有文档感到困惑.例如这里,在文档的开头我看到:
要注册您的服务,请调用DNSServiceRegister.
我应该在哪里打电话?在命令行?在Java?在C++中?在python中?没有提供这种背景有点奇怪.
一般来说,我只找到关于zeroconf和Bonjour的一般信息(它应该做什么).但我找不到具体而简单的东西.像"Hello World"一样使用Bonjour的例子.
任何人都可以帮助我吗?
我有一些我想用zeroconf看到的应用程序.
Python或sh是首选.特定于操作系统的建议欢迎使用Linux和OS X.
zeroconf ×10
bonjour ×7
android ×4
networking ×3
java ×2
bluetooth ×1
c ×1
embedded ×1
javascript ×1
jmdns ×1
lwip ×1
mdns ×1
python ×1
wifi-direct ×1