次の問題があります。
リモート マシンに非常に単純な Java Datagram クライアントとサーバーを配置しています。また、クライアントは、以前にサーバーにパケットを送信しない限り、サーバーから何も受信しません (パケットが保持していた情報は関係ありません)。
私のクライアントは次のようになります。
public static void TheClient() throws Exception {
ds = new DatagramSocket(clientPort);
while(true) {
DatagramPacket p = new DatagramPacket(buffer, buffer.length);
ds.receive(p);
System.out.println(new String(p.getData(), 0, p.getLength()));
}
}
基本的に、ポート clientPort でリッスンし、受信したものを出力するだけです。しかし、それは機能しません。
少し変更すると、問題が解決します。
public static void TheClient() throws Exception {
ds = new DatagramSocket(clientPort);
//Sending an empty packet
byte tempBuffer1[] = new byte[10];
InetAddress address = InetAddress.getByName(SERVER_IP);
DatagramPacket packet1 = new DatagramPacket(
tempBuffer1, tempBuffer1.length, address, serverPort);
ds.send(packet1);
while(true) {
DatagramPacket p = new DatagramPacket(buffer,
buffer.length);
ds.receive(p);
System.out.println(new String(p.getData(), 0,
p.getLength()));
}
}
この問題の原因を知っている人はいますか? 回避策は問題を解決しましたが、なぜそれが最初に機能しなかったのか、私には意味がありません。そのため、ソリューションが実際にはすべてのコンピューターで機能するとは限りません。
また、クライアントとサーバーの両方が同じマシン上にある場合、コードは正常に機能することに注意してください。