12

次のクライアントとサーバーの UDP ブロードキャスト コードは、両方が同じ PC 上にある場合に正常に動作します。ただし、同じ WIFI LAN 内の別の PC にそれらを持っていると、何も起こりません。2 台の別々の PC でマルチキャスト バージョンを正常に動作させることができましたが、これはできませんでした :(. 両方のファイアウォールをシャットダウンし、両方の PC からそれぞれ ping に成功しました。

このテストの背後にある考え方は、この方法を使用して、クライアントがデータグラム パケットを送信することで LAN 上のサーバーを見つけることができるようにすることです (ピア検出)。私はホスト名か何かで何か間違っていると思いますが、1週間グーグルで新しいアイデアをテストした後、私は正式にそれらをすべて使い果たしました:(。

public class Client
{
    private String hostname= "localhost";
    private int port=1234;
    private InetAddress host;
    private DatagramSocket socket;
    DatagramPacket packet;

    public void run()
    {
        try
        {
            host = InetAddress.getByName(hostname);
            socket = new DatagramSocket (null);
            packet=new DatagramPacket (new byte[100], 0,host, port);
            socket.send (packet);
            packet.setLength(100);
            socket.receive (packet);
            socket.close ();
            byte[] data = packet.getData ();
            String time=new String(data);  // convert byte array data into string
            System.out.println(time);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}



public class Server
{
    public static final int DEFAULT_PORT = 1234;
    private DatagramSocket socket;
    private DatagramPacket packet;

    public void run()
    {
        try
        {
            socket = new DatagramSocket(DEFAULT_PORT);
        }
        catch( Exception ex )
        {
            System.out.println("Problem creating socket on port: " + DEFAULT_PORT );
        }

        packet = new DatagramPacket (new byte[1], 1);

        while (true)
        {
            try
            {
                socket.receive (packet);
                System.out.println("Received from: " + packet.getAddress () + ":" +
                                   packet.getPort ());
                byte[] outBuffer = new java.util.Date ().toString ().getBytes ();
                packet.setData (outBuffer);
                packet.setLength (outBuffer.length);
                socket.send (packet);
            }
            catch (IOException ie)
            {
                ie.printStackTrace();
            }
        }
    }
}

誰かが助けてくれるかどうか疑問に思っていますか?

4

2 に答える 2

11

実際にブロードキャストするには、パケットを LAN 上のすべての IP に送信する必要があります。可能な IP の範囲は 0.0.0.0 から 254.254.254.254 ですが、それらすべてを選択するには、255.255.255.255 と書くことができます。しかし、ほとんどのルーターはこれをブロックします。それらは、192.168.1.0 から 192.168.1.254 までのすべての 255 IP への 192.168.1.255 魔女ブロードキャストのようなものを許可します。

于 2012-11-09T18:59:54.197 に答える
3

ホスト名は localhost ですか? その場合、他の PC に到達できません。ターゲット IP アドレスで変更する必要があります。

于 2012-10-21T16:08:15.577 に答える