簡體   English   中英

java udp檢測數據包損壞

[英]java udp detect packet corruption

如何在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段。 當然,在建議的解決方案中,您需要處理更多的錯誤情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM