0

ネットワークで送信する必要がありUDP Broadcastます。しかし、私は混乱しています。私が知っているのは、ブロードキャストはアドレス固有ではなく、マルチキャストはグループ (アドレス) 固有です。

なので、ネットワークからの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();
        }
    }
}

上記のコードがブロードキャストまたはマルチキャスト用であると予測することはできません。ブロードキャストの場合、マルチキャスト用に変更する必要があります。マルチキャストの場合、Boradcast にどのような変更を加える必要があるか。

4

1 に答える 1

2

の値に依存します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 ):

マルチキャスト アドレスは、224.0.0.0 ~ 239.255.255.255 の範囲です。

したがって、宛先 IP アドレスがその範囲 (たとえば 224.224.1.2) にある場合、そのマルチキャスト グループ アドレスをリッスンしているすべてのクライアントがパケットを受信します。

于 2013-05-12T20:55:41.297 に答える