1. MDNSClient
// start
WifiManager wifi = (WifiManager) getSystemService(WIFI_SERVICE);
MulticastLock mLock = wifi.createMulticastLock("mylockthereturn");
mLock.setReferenceCounted(true);
mLock.acquire();
JmDNS mJmDNS = JmDNS.create();
mJmDNS.addServiceListener("_workstation._tcp.local.", new ServiceListener(){
@Override
public void serviceAdded(ServiceEvent ev) {
if ("device_server_name".equals(ev.getName())) {
ServiceInfo info = ev.getDNS().getServiceInfo(ev.getType(), ev.getName());
String ip = info.getHostAddresses()[0];
}
}
@Override
public void serviceRemoved(ServiceEvent ev) {
if ("device_server_name".equals(ev.getName())) {
}
});
// stop
if (mJmDNS != null) {
mJmDNS
.removeServiceListener("_workstation._tcp.local."
new ServiceListener());
mJmDNS.unregisterAllServices();
mJmDNS.close();
mJmDNS = null;
}
if (mLock != null) {
mLock.release();
mLock = null;
}
mnds Server:
//start
WifiManager wifi = (WifiManager) getSystemService(WIFI_SERVICE);
MulticastLock mLock = wifi.createMulticastLock("mylockthereturn");
mLock.setReferenceCounted(true);
mLock.acquire();
InetAddress addr = null;
InetAddress[] aaString = NetworkTopologyDiscovery.Factory
.getInstance().getInetAddresses();
if (aaString == null) {
Log.d(TAG, "无网络链接,启动MDNS服务失败!");
return;
}
for (int i = 0; i < aaString.length; i++) {
if (aaString[i].getHostAddress().contains("wlan0")
|| aaString[i].getHostAddress()
.contains("eth0")) {
continue;
}
addr = aaString[i];
}
if (addr == null) {
Log.d(TAG, "无网络链接,启动MDNS服务失败!");
return;
}
Log.d(TAG, "服务器地址:" + addr.getHostAddress());
mJmDNS = JmDNS.create(addr);
} catch (IOException e) {
e.printStackTrace();
}
mServiceInfo = ServiceInfo.create("_workstation._tcp.local.",
"device_server_name", 5353, "this is stb ip");
JmmDNS.Factory.getInstance().addNetworkTopologyListener(
new serverLitener());
try {
mJmDNS.registerService(mServiceInfo);
} catch (IOException e) {
e.printStackTrace();
}
// stop
if (mJmDNS != null) {
mJmDNS.close();
mJmDNS = null;
}
if (mLock != null) {
mLock.release();
mLock = null;
}