【发布时间】: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