我有一个原型Android应用程序正在侦听多播数据包以“发现”客户端进行通信。套接字设置类似于:
InetAddress group = InetAddress.getByName("228.1.2.3");
MulticastSocket s = new MulticastSocket(4000);
s.joinGroup(group);
当所有设备通过WiFi连接时,此功能非常有效。我想用手机充当便携式热点来支持这一点。但是,虽然我的所有设备似乎都正确连接到热点,但我不再收到组播数据。我想知道是否存在禁止在热点模式下进行此类通信的限制,或者是否需要任何其他网络配置才能启用此功能?我在运行Gingerbread和Froyo的几个不同的设备上尝试过这个,但没有运气。
答案 0 :(得分:3)
正如本文所示: https://plus.google.com/+Chainfire/posts/9NMemrKYnCd
MulticastSocket上:: setNetworkInterface()
将是答案
您可以通过以下方式找到wlan0 eth:
public static NetworkInterface getWlanEth() {
Enumeration<NetworkInterface> enumeration = null;
try {
enumeration = NetworkInterface.getNetworkInterfaces();
} catch (SocketException e) {
e.printStackTrace();
}
NetworkInterface wlan0 = null;
StringBuilder sb = new StringBuilder();
while (enumeration.hasMoreElements()) {
wlan0 = enumeration.nextElement();
sb.append(wlan0.getName() + " ");
if (wlan0.getName().equals("wlan0")) {
//there is probably a better way to find ethernet interface
Log.i(TAG, "wlan0 found");
return wlan0;
}
}
return null;
}
尝试并了解热点模式中是否有效...
答案 1 :(得分:0)
您是否拥有清单权限并且正在创建锁定?
有关权限,请参阅http://developer.android.com/reference/android/Manifest.permission.html中的'CHANGE_WIFI_MULTICAST_STATE'
另外,要创建多播锁...请参阅: http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html