【问题标题】:Cannot get a response using java Udp使用 java Udp 无法获得响应
【发布时间】:2015-09-22 22:44:29
【问题描述】:

当我使用 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);

}

【问题讨论】:

标签: java udp


【解决方案1】:

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

然而,UDP 是一劳永逸的,(点对多点)所以当你 .send(...) 数据包已经在进行中。您对 .receive(...) 的调用来得太晚了。

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

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

【讨论】:

    猜你喜欢
    • 2017-08-21
    • 2021-08-19
    • 2016-11-05
    • 2014-06-06
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多