次のクライアントとサーバーの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();
}
}
}
}
誰かが助けることができるかどうか疑問に思っていますか?
実際にブロードキャストするには、LAN上のすべてのIPにパケットを送信する必要があります。可能なIPの範囲は0.0.0.0から254.254.254.254ですが、それらすべてを選択するには、255.255.255.255と記述できます。しかし、ほとんどのルーターはこれをブロックします。 192.168.1.255のようなものが192.168.1.0から192.168.1.254までのすべての255IPにブロードキャストできるようになります。これは、必要なものだと思います。
ホスト名はローカルホストですか?もしそうなら、あなたは他のPCに到達することはできません。ターゲットIPアドレスで変更する必要があります。