Java資料報之失序和丟包
來源:互聯網
上載者:User
習慣了TCP編程,認為UDP可以包辦這些問題是錯誤的。一個UDP應用程式要承擔可靠性方面的全部工作,包括報文的丟失、重複、時延、亂序以及串連失效等問題。
通常我們在可靠性好,傳輸時延小的區域網路上開發測試,一些問題不容易暴露,但在大型互連網上卻會出現錯誤。
UDP協議把遞送的可靠性責任推到了上層即應用程式層,下面簡單編寫了幾個類來專門處理兩個問題:亂序和丟包。
四個類:DataPacket 類,PacketHeader類,PacketBody類 ,DataEntry類,位於同一個檔案DataPacket .java中。
DataPacket 類相當於一個門面模式,提供給外部使用,通訊資料也在這個類中處理。
package com.skysoft.pcks;
import java.io.*;
import java.net.*;
import java.util.*;
public class DataPacket {
InputStream is;
OutputStream os;
PacketHeader header;
PacketBody body;
ArrayList al;
public static final int DataSwapSize = 64532;
/**
* 在接收資料報使用
*/
public DataPacket() {
header = new PacketHeader();
body = new PacketBody();
al = new ArrayList();
}
/**
* 在發送資料報時使用,它調用報文分割操作.
* @param file String 硬碟檔案
*/
public DataPacket(String file) {
this();
try {
is = new FileInputStream(file);
header.CalcHeaderInfo(is.available());
this.madeBody();
is.close();
//this.Gereratedata();
}
catch (FileNotFoundException ex) {
ex.printStackTrace();
}
catch (IOException ex1) {
ex1.printStackTrace();
}