gpt4 book ai didi

java - 组播 : using joinGroup on a multicast socket (java/android) packet isn't received

转载 作者:行者123 更新时间:2023-12-03 11:55:09 27 4
gpt4 key购买 nike

我正在开发一个 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());

端口为 4321,组播地址(由 getGroup 返回)为 224.1.1.1

我不明白为什么这不起作用,当我在计算机上使用多播套接字时它运行良好。

谢谢大家,祝你有个美好的一天

**更新 : **

我通过替换来消除错误:
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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com