使用 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/