【问题标题】:May UDP group the sending of datagrams?UDP可以分组数据报的发送吗?
【发布时间】:2018-04-05 21:03:17
【问题描述】:

使用 UDP,如果我在一个 DatagramSocket 上发送两个 DatagramPackets(假设第一个数据报说“ABCD”,第二个说“EFGH”), 从理论上讲,我第一次在套接字上调用“receive”是否有可能给我一个包含“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”吗?

【问题讨论】:

    标签: java networking udp


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2015-04-02
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-20
      相关资源
      最近更新 更多