gpt4 book ai didi

java udp检测数据包损坏

转载 作者:太空宇宙 更新时间:2023-11-04 14:28:35 25 4
gpt4 key购买 nike

如何检测 java 中的 udp 数据包损坏?

public class PacketReceiver implements Runnable{
byte[] dataReceive = new byte[udpConnectionManager.MAX_PACKET_SIZE];
private ArrayList<Thread> workerList = new ArrayList<Thread>();
@Override
public void run() {
while(true){
DatagramPacket receivePacket = new DatagramPacket(dataReceive, dataReceive.length);
try {
udpConnectionManager.socket.receive(receivePacket);
} catch (IOException e) {
e.printStackTrace();
}
byte[] receivedData = receivePacket.getData();
//[0] stores basic command
//[1~4] int stores protocol id
//[5~9] int data increase counter for detect packet loss
//[10~14]
switch(receivedData[0]){
//initial packet
case 0x01:
if(!udpConnectionManager.instance.isInitialized(receivePacket)){
Thread t = new Thread(new AcceptThread(receivePacket));
t.start();
workerList.add(t);
}else{
System.out.println("initialized packet attempt to initialize.");
}
//heartbeat signal
case 0x02:
if(udpConnectionManager.instance.isInitialized(receivePacket)){
udpConnectionManager.instance.getConnection(receivePacket).onHeartBeat();
}else{
System.out.println("Received HeartBeat signal from non-initialized connection");
}
//
case 0x03:

}
}
}

}

可能会发生数据包损坏。我如何使用 udp 处理数据包损坏问题?我知道如何检测数据包丢失,但我不知道如何检测数据包损坏。

最佳答案

如果您绝对需要仅使用 DatagramPacket - 那么,它不会公开任何 api 来查询传输的校验和。您可以实现的解决方案是使用逻辑(SHA256、MD..)来计算校验和,将校验和作为交替 UDP 数据包中的有效负载传输,并将数据有效负载计算的校验和与下一个接收到的校验和进行比较UDP 段。当然,您需要在建议的解决方案中处理更多的错误情况。

关于java udp检测数据包损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26406066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com