我想在java中實現udp圖像傳輸程序。發送方將圖像分成1024字節的數據包,其中前2個字節是帶有序列號的短字,第3個字節是表示數據包是否是最後一個的標誌。通過udp發送的圖像損壞
當我執行接收器並使用發件人發送圖像時,傳輸的圖像不完整並且顏色奇怪。 其他時候,當我執行接收器時,發送幾百個數據包後它會粘住。
下面是接收器的代碼,它接收數據包並將其寫入字節流。
double DATAGRAM_MAX_SIZE = 1024;
byte[] recieveData = new byte[(int) DATAGRAM_MAX_SIZE];
ByteArrayInputStream bais = new ByteArrayInputStream(recieveData);
DataInputStream dis = new DataInputStream(bais);
// Loop until all packets received
byte isLast = 0;
while(true) {
receievePacket = new DatagramPacket(recieveData, recieveData.length);
try {
receieveSocket.receive(receievePacket);
} catch (IOException e) {
System.out.println("Error receieving packet");
e.printStackTrace();
}
Short sequenceNum = dis.readShort();
isLast = dis.readByte();
System.out.println(recieveData[0] + " " + recieveData[1] +" " + recieveData[2]);
if (!seenSeq.contains(sequenceNum)) {
seenSeq.add(sequenceNum);
bos.write(recieveData, 3, (int) DATAGRAM_MAX_SIZE-3);
}
dis.reset();
// Terminate loop if last packet received
if (isLast == 1) {
break;
}
}
// Byte array to hold image data from stream
byte[] imageData = bos.toByteArray();
每當接收並管理在這裏receieve所有數據包是產生的圖像:
我經常建議你在嘗試UDP之前使用TCP實現一個傳輸/連接,因爲它可靠地使用要複雜得多。 – 2012-02-26 21:09:49