【发布时间】:2024-01-22 04:13:01
【问题描述】:
要获得可靠的连接,您必须使用 TCP。
但是,我想知道是否有办法修改我的代码,以便我可以检查 UDP 中丢失的数据包
try {
DatagramSocket socket = new DatagramSocket(5000);
while(true) {
byte[] buffer = new byte[50];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
System.out.println("Text received is: " + new String(buffer, 0, packet.getLength()));
String returnString = "echo: " + new String(buffer, 0, packet.getLength());
byte[] buffer2 = returnString.getBytes();
InetAddress address = packet.getAddress();
int port = packet.getPort();
packet = new DatagramPacket(buffer2, buffer2.length, address, port);
socket.send(packet);
}
} catch(SocketException e) {
System.out.println("SocketException: " + e.getMessage());
} catch(IOException e) {
System.out.println("IOException: " + e.getMessage());
}
}
【问题讨论】:
-
不。普遍接受的方法是等待接收方确认收到数据包,如果没有收到确认,则在超时后再次发送数据包。但这正是 TCP 所做的,那么为什么要重新发明*呢?只需使用 TCP。
-
你需要实现一个应用层协议来做到这一点。您将有一个特定的数据报格式,其标题使用序列号之类的东西来确定数据报是否丢失。 TCP 和其他可靠协议就是这样做的。
-
我已经把它作为一个 C# 问题的副本关闭了......因为任何编程语言的答案基本上都是相同的。
标签: java tcp network-programming udp