Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中广播和多播代码的区别_Java_Sockets - Fatal编程技术网

java中广播和多播代码的区别

java中广播和多播代码的区别,java,sockets,Java,Sockets,我需要在网络中发送UDP广播。但我感到困惑。我所知道的是,广播不是特定于地址的,多播是特定于组(地址)的 因此,我使用DatagramSocket从网络发送和接收datagrampackes 我正在编写的代码是: public class ComputerSender implements Runnable { MulticastSocket socket; DatagramPacket packet; String command; public Compute

我需要在网络中发送
UDP广播
。但我感到困惑。我所知道的是,广播不是特定于地址的,多播是特定于组(地址)的

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

我正在编写的代码是:

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();
        }
    }
}

我无法预测上面的代码是用于广播或多播的。如果是广播,那么我需要对多播进行哪些更改。如果是多播,那么我需要为Boradcast带来什么变化。

这取决于
WifiConstants.COMPUTER\u NETWORK\u ADDR
的值

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

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

根据IANA():

多播地址在范围内 224.0.0.0至239.255.255.255


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

我是否应该使用DatagramSocket或多播Socket进行广播,…?DatagramSocket。我不确定如果使用MulticastSocket进行广播会发生什么,但我怀疑它不会做任何令人满意的事情。您可以使用其中任何一种进行发送。您必须使用多播套接字来接收多播。谢谢@EJP。很高兴知道