使用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>
答案 0 :(得分:1)
没有。 UDP数据报完整且完整地接收,或者根本不接收。也可能是多次,乱序,......但从未合并过。