我有以下问题:
我有一个位于远程机器上的非常简单的 Java 数据报客户端和服务器。并且客户端不会从服务器接收任何东西,除非它更早地向服务器发送了一个数据包(数据包包含什么信息都没有关系)
这是我的客户的样子:
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()));
}
}
有谁知道可能导致此问题的原因?虽然解决方法确实解决了问题,但对我来说为什么它最初无法正常工作没有任何意义,因此该解决方案实际上可能无法在所有计算机上工作。
另外,应该注意的是,当客户端和服务器都在同一台机器上时,代码可以正常工作。