gpt4 book ai didi

java - java中广播和组播代码的区别

转载 作者:行者123 更新时间:2023-12-02 07:02:10 24 4
gpt4 key购买 nike

我需要在网络中发送UDP广播。但我越来越困惑了。据我所知,广播不是特定于地址的,而多播是特定于组(地址)的。

因此,我使用 DatagramSocket 从网络发送和接收 DatagramPackets

我正在编写的代码是:

public class ComputerSender implements Runnable
{
MulticastSocket socket;
DatagramPacket packet;
String command;
public ComputerSender(String MAC)
{
try
{
socket = new MulticastSocket();
JSONManager json = new JSONManager(MAC, WifiConstants.COMPUTER_NET_SCAN);
json.setRecvMAC(WifiConstants.COMPUTER_NETWORK_ADDR);
InetAddress addr = InetAddress.getByName(WifiConstants.COMPUTER_NETWORK_ADDR);
command="Hello";
}
catch(Exception e)
{
Log.v("Exception:","Computer Constructor Error: "+e.toString());
}
}
@Override
public void run()
{
try
{
System.out.println(command);
packet=new DatagramPacket(command.getBytes(),command.getBytes().length,InetAddress.getByName(WifiConstants.COMPUTER_NETWORK_ADDR), WifiConstants.COMPUTER_SEND_PORT);
socket.setTimeToLive(100);
socket.send(packet);
System.out.println("Packet Sent");
Thread.sleep(200);
}
catch(Exception e)
{
Log.v("Packet Sending Error: ","Computer Error: "+e.getMessage());
}
finally
{
socket.close();
}
}
}

我无法预测上面的代码是用于广播还是组播。如果是广播,那么我需要对多播进行哪些更改。如果是多播,那么我需要为广播做出哪些改变。

最佳答案

这取决于 WifiConstants.COMPUTER_NETWORK_ADDR 的值。

如果是广播,则需要是您所在网段的广播地址。例如,如果您的 IP 地址为 10.1.2.3,子网掩码为 255.255.0.0,则 10.1.255.255 就是广播地址。

但是,多播地址使用多播地址范围内的组地址。

根据 IANA ( http://www.iana.org/assignments/multicast-addresses/multicast-addresses.xml ):

The multicast addresses are in the range 224.0.0.0 through 239.255.255.255.

因此,如果目标 IP 地址在该范围内(例如 224.224.1.2),则监听该多播组地址的任何客户端都将收到您的数据包。

关于java - java中广播和组播代码的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16511840/

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