可以UDP组发送数据报吗?

时间:2018-04-05 21:03:18

标签: 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”吗? / p>

1 个答案:

答案 0 :(得分:1)

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