【发布时间】:2012-02-26 20:44:46
【问题描述】:
我正在尝试在 java 中实现一个 udp 图像传输程序。发送方将图像分解为 1024 字节的数据包,其中前 2 个字节是一个带有序列号的短字节,第 3 个字节是一个标志,指示该数据包是否是最后一个。
当我执行接收器并使用发送器发送图像时,传输的图像不完整并且上面有奇怪的颜色。 其他时候我执行receiver,发了几百包就卡住了。
这里是接收器的代码,它接收接收到的数据包并将其写入字节流。
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();
只要接收器确实设法接收到所有数据包,这里就是生成的图像:
【问题讨论】:
-
我经常建议您在尝试使用 UDP 之前使用 TCP 实现传输/连接,因为可靠使用要复杂得多。