我正在尝试通过UDP发送一个28KB的文本文件,其中包含8字节的前置标头,其中包含发送的每个数据包的序列号和数据包大小。当尝试发送数据包大小为1000字节的文件时,在接收到8KB的文件后,当从包含我的字节数组的字节缓冲区中运行获取int行时,我得到ArrayIndexOutOfBoundsException:
packetSize = buff.getInt();
客户端代码如下:
FileOutputStream fos = null;
fos = new FileOutputStream(sDstPath);
FileChannel fc = fos.getChannel();
while(dataBytesRcvd <= fileSize)
{
if((fileSize - dataBytesRcvd) < (packetSize - 8)) //added to adjust last packet's size
packetSize = fileSize - dataBytesRcvd + 8;
DatagramPacket packet = new DatagramPacket(bytes, packetSize, dp.getSocketAddress());
ds.receive(packet);
ByteBuffer buff = ByteBuffer.wrap(bytes);
seqNum = buff.getInt();
seq[seqNum]=1;
packetSize = buff.getInt();
dataBytesRcvd += (packetSize-8);
fc.write(buff);
buff.clear();
}
应该注意的是,将字节数组大小增加到比数据包大小多4个字节,也没有任何帮助。它可能有什么问题?