0

他のピアを検出することのみを目的として、ピアがWIFILAN経由でDatagramPacketsを送信できるようにしたいと思います。したがって、各ピアはクライアント(パケットの送信)とサーバー(パケットのリッスン)で構成されています。

これを機能させるには、各マシンでIPConfigを使用してそれぞれのIPv4アドレスを取得し、それをDatagramPacketを作成するためのパラメーターとして使用する必要があります。-

InetAddress server = InetAddress.getByName("THE IPv4 ADDRESS OF THE PEER'S SERVER
                                            RUNNING ON THE OTHER MACHINE");

DatagramPacket sendPacket = new DatagramPacket(outBuffer, outBuffer.length,
                                               server, serverPort);

ここでは、ブロードキャスト(ピア検出用)を正しい方法で使用していますか?私は、machineA上のクライアントがLANの深淵にパケットを送信し、machineBで実行されているサーバーがLAN全体をリッスンしてパケットを検出できると想定していました。現時点では、サーバーを実行しているマシンでIPConfigを手動で使用し、クライアントを実行しているマシンのDatagramPacketにそのアドレスを入力するだけですが、これは無意味に思えます。

マルチキャストは問題なく使用できますが、ピア検出に必要なのはブロードキャストの方が多いと思います。

感謝します。

4

2 に答える 2

1

255.255.255.255ブロードキャストアドレス( 、またはローカルネットワークのブロードキャストアドレス(192.168.1.255ネットワークセグメントがの場合など)ではなく、サーバーのアドレスを指定しているため、これは実際にはブロードキャストではありません192.168.1.0/24

また、サーバーポートで着信UDPパケットをブロックするファイアウォールがある可能性があると考えるかもしれません。DatagramSocket / DatagramPacketのドキュメントを参照して、サーバーソケットを適切にバインドしたり、クライアントからパケットを適切に送信したりするための魔法の呪文があるかどうかを確認する必要があります。

[編集:ネットワークブロードキャストの検索方法]ネットワークアドレスがわかれば、ネットワークブロードキャストアドレスを見つけることができます。どちらもIPとサブネットマスクからわかります。サブネットマスクは基本的に、アドレスのどれだけがネットワークであり、どれだけがクライアントであるかを示します。(サブネットマスクは「ネットマスク」と表記されることがよくあります)例:

IP:192.168.1.101ネットマスク:255.255.255.0ネットワークアドレス(CIDR):192.168.1.0/24ブロードキャストアドレス:192.168.1.255

また:

IP:10.13.28.55ネットマスク:255.255.0.0ネットワーク:10.13.0.0/16ブロードキャストアドレス:10.13.255.255

つまり、基本的に、ネットワークアドレスの最後にはゼロがたくさんあり、ブロードキャストアドレスはそれらを1に置き換えます。

IPv4アドレスは32ビットの数値です(符号なしと考えるのが最も簡単です。アドレスとネットマスクのビット単位のANDを実行すると、ネットワークアドレスが取得されます。ビット単位の場合、またはビット単位の場合は、ネットマスクではありません。 、ブロードキャストアドレスを取得します((addr & netmask) | ~netmask)ローカルブロードキャストも取得します)。

255.255.255.255(または0xFFFFFFFF)はグローバルブロードキャストアドレスです。ただし、IPブロードキャストはネットワークセグメントを越えないため、安全に送信できます。

于 2012-10-23T18:22:28.067 に答える
0

255.255.255.255サーバーとクライアントの両方にブロードキャストアドレスを使用します。

于 2012-10-23T18:15:57.410 に答える