gpt4 book ai didi

java - 无法使用 java Udp 获得响应

转载 作者:行者123 更新时间:2023-12-01 11:08:04 24 4
gpt4 key购买 nike

当我使用 Udp DatagramSocketDatagramPacket 类时,我无法得到响应。我使用 Tcp Socket 测试了同一台服务器,它响应正确。

public static void main(String[] args) throws IOException {

DatagramSocket socket = new DatagramSocket(0); // random available port
System.out.println("port: " + socket.getLocalPort());
socket.setSoTimeout(3000); // 3 seconds timeout

DatagramPacket request = new DatagramPacket(new byte[1], 1, InetAddress.getByName("time.nist.gov"),
13);

DatagramPacket response=new DatagramPacket(new byte[1024],1024);

socket.send(request);
socket.receive(response);

String daytime = new String(response.getData(), 0, response.getLength(),
"US-ASCII");
System.out.println(daytime);

}

最佳答案

这不起作用,因为 TCP 是点对点的,需要有人在另一端读取。

然而,UDP 是即发即忘(点对多点),因此当您 .send(...) 时,数据包已经在传输中。您对 .receive(...) 的调用只是来晚了。

要修复您的示例,请生成一个线程,该线程在主线程中调用 .send(...) 之前调用 .receive(...) 。

出于与 TCP 相同的原因,您的代码也存在问题。它之所以有效,是因为发送的单个字节很容易放入堆栈上的缓冲区中。因此,要使用 TCP 来破坏您的示例,只需使您发送的有效负载足够大即可。如果另一端没有人接收,您的发送操作将无限期阻塞(或超时)。

关于java - 无法使用 java Udp 获得响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32719618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com