次のクライアントとサーバーの 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();
}
}
}
}
誰かが助けてくれるかどうか疑問に思っていますか?