java - UDP可以分组发送数据报吗?

标签 java networking udp

使用 UDP,如果我在一个 DatagramSocket 上发送两个 DatagramPackets(假设第一个数据报为“ABCD”,第二个数据报为“EFGH”), 从理论上讲,我第一次调用套接字上的“接收”是否可能给我一个包含“ABCDEFGH”的 DatagramPacket?

换句话说,通过 UDP 发送的消息是否可以分组为一条消息,如果可以,UDP 是否首先“记住”它是多个不同的消息?

假设我的客户是:

//DSender.java  
import java.net.*;  

public class DSender{  
    public static void main(String[] args) throws Exception {  
    DatagramSocket ds = new DatagramSocket();  

    InetAddress ip = InetAddress.getByName("127.0.0.1");  

    // Send a first message
    String str = "ABCD";
    DatagramPacket dp1 = new DatagramPacket(str.getBytes(), str.length(), ip, 3000);  
    ds.send(dp1);  

    // Send a second message (on the same socket)
    str = "EFGH";
    DatagramPacket dp2 = new DatagramPacket(str.getBytes(), str.length(), ip, 3000);  
    ds.send(dp2);  

    ds.close();  
  }  
}  

我的服务器是:

//DReceiver.java  
import java.net.*;  
public class DReceiver{  
    public static void main(String[] args) throws Exception {  
        DatagramSocket ds = new DatagramSocket(3000);  
        byte[] buf = new byte[1024];  
        DatagramPacket dp = new DatagramPacket(buf, 1024);  
        ds.receive(dp);  
        String str = new String(dp.getData(), 0, dp.getLength());  
        System.out.println(str);  
        ds.close();  
    }  
}

这段代码可能输出“ABCD”,也可能输出“EFGH”(如果第一条消息丢失),也可能什么都不输出(如果两条消息都丢失),但是它能输出“ABCDEFH”吗?

最佳答案

没有。 UDP 数据报被完好无损地接收,或者根本不被接收。也可能多次,无序,...但从未合并。

关于java - UDP可以分组发送数据报吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49681488/

相关文章:

java - HTTP 请求是通过 TCP 还是 UDP 接收的?

java - 在Java中,当另一个音频文件开始使用key_events时,如何停止前一个音频文件

c - 时间服务器时间类型问题

python - 打印出带有名称的端口

c - 在下面的场景中我是服务器还是客户端?

tcp - UDP 和 TCP ping 是否有标准方法?

java - 为什么Android Studio 3.0不支持默认和静态接口(interface)方法

java - 按值或引用传递

java - 如何重新打开关闭的套接字以便将消息发送回客户端

python - 反序列化 C 数据