作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 android 应用程序(使用 java):我正在尝试使用 java MulticastSocket 在几部手机之间发送信息。
当应用程序启动时,这些手机连接到同一个接入点,这个接入点就是我的电脑。这很好用,因为当应用程序启动时,我可以访问互联网。
但是当我试图在我的套接字上执行 joinGroup 时,我得到了错误:
java.net.SocketException:setsockopt 失败:ENODEV(没有这样的设备)
我已经对此进行了大量研究,但没有结果与我的问题相符。
这是我的代码:
在主要 Activity 中,我将手机连接到同一个热点。
msg = handlerConnectionMsg.obtainMessage();
Bundle b = new Bundle();
// Get the wifi manager
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiManager.MulticastLock multicastLock = wifiManager.createMulticastLock("mydebuginfo");
multicastLock.setReferenceCounted(true);
multicastLock.acquire();
// Enable the wifi
boolean wasEnabled = wifiManager.isWifiEnabled();
msg = handlerConnectionMsg.obtainMessage();
b = new Bundle();
b.putInt("connection_message", ACTIVATING_WIFI);
msg.setData(b);
handlerConnectionMsg.sendMessage(msg);
wifiManager.setWifiEnabled(true);
// Wait for the connection
while(!wifiManager.isWifiEnabled());
boolean ret = true;
// Connect to the access point and disable the connection to others
if (wifiManager.isWifiEnabled() && wifiManager.startScan())
{
msg = handlerConnectionMsg.obtainMessage();
b = new Bundle();
b.putInt("connection_message", CONNECTION_AP);
msg.setData(b);
handlerConnectionMsg.sendMessage(msg);
ret = connectToAP(wifiManager, "trainee_hotspot_test", "d0nt3nt3rThis");
}
if (!ret)
{
msg = handlerConnectionMsg.obtainMessage();
b = new Bundle();
b.putInt("connection_message", CONNECTION_ERROR);
msg.setData(b);
handlerConnectionMsg.sendMessage(msg);
return;
}
msg = handlerConnectionMsg.obtainMessage();
b = new Bundle();
// Valid connection
b.putInt("connection_message", CONNECTED);
b.putString("current_ap", wifiManager.getConnectionInfo().getSSID());
msg.setData(b);
handlerConnectionMsg.sendMessage(msg);
}
private boolean connectToAP(WifiManager wifi, String name, String pass)
{
// Create a new wifiConfiguration object
WifiConfiguration wifiConfig = new WifiConfiguration();
// Add informations to it
wifiConfig.SSID = String.format("\"%s\"", name);
wifiConfig.preSharedKey = String.format("\"%s\"", pass);
// We add this configuration to the wifi manager and get the id
int netId = wifi.addNetwork(wifiConfig);
// Disconnect from the current AP
wifi.disconnect();
// Enable the hotspot with given SSID if it exists
boolean status = wifi.enableNetwork(netId, true);
wifi.reconnect();
return status;
}
}
multicastSocket = new MulticastSocket(port);
multicastSocket.joinGroup(getGroup());
multicastSocket.joinGroup(getGroup());
multicastSocket.joinGroup(new InetSocketAddress(getGroup(), port), NetworkInterface.getByName("p2p0"));
最佳答案
我知道这个问题太老了,但是这些天我在将多播数据包从一个接口(interface)(eth0)发送到另一个接口(interface)(usbnet0)时遇到问题(我的 Odroid UX4 中有 2 个以太网,usb 集线器+以太网),我m 使用像你一样的代码但不工作,总是将数据包发送到默认接口(interface)“eth0”
错误代码;
NetworkInterface nif2 = NetworkInterface.getByName("usbnet0");
MulticastSocket mcs2 = new MulticastSocket(dPort);
mcs2.joinGroup(new InetSocketAddress(dIP, dPort), nif2);
NetworkInterface nif2 = NetworkInterface.getByName("usbnet0");
MulticastSocket mcs2 = new MulticastSocket(dPort);
mcs2.setNetworkInterface(nif2); //THIS LINE IS THE KEY
mcs2.joinGroup(new InetSocketAddress(dIP, dPort), nif2);
关于java - 组播 : using joinGroup on a multicast socket (java/android) packet isn't received,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43386312/
我是一名优秀的程序员,十分优秀!