我想使用Java中的UDP DatagramPacket将从磁盘读取的视频文件传输到接收器。
关键点如下:虽然要从磁盘读取要传输的文件,但我应该假设我不知道文件大小。需要逐步读取总文件,并且文件的数据报包应具有不同的大小。
简而言之,我应该假设我正在将一个实时视频流式传输到接收器,而不知道我将需要发送多少数据以及生成数据的速率。
现在,我有一个代码可以立即读取磁盘上的文件并转换为数据报包以使用UDP套接字进行传输。但是我不知道如何在不知道原始文件大小的情况下打包文件并逐步读取会模拟视频的实时流式传输。
使用Java实现这个想法的任何输入都非常有用。一旦我掌握了这个基本的东西,我就需要实现一个实时的文件传输协议。
发信人:
File file = new File("/crazy.mp4");
FileInputStream fis = new FileInputStream(file);
DatagramPacket pack;
int size = 0;
byte[] buffer = new byte[((int) file.length())];
ByteBuffer bb = ByteBuffer.allocate(4);
bb.order(ByteOrder.BIG_ENDIAN);
while (true) {
size = fis.read(buffer);
pack = new DatagramPacket(buffer, buffer.length, address,
packet.getPort());
socket.send(pack);
}
接收器:
File file = new File("/crazyRecv.mp4");
FileOutputStream fos = new FileOutputStream(file);
DatagramPacket rpacket = new DatagramPacket(buffer, buffer.length);
while (true) {
socket.receive(rpacket);
fos.write(rpacket.getData(), 0, rpacket.getLength());
}
感谢。
答案 0 :(得分:2)
此发送和接收UDP数据包的代码无法保证在客户端成功重新创建文件。
如果您仍想使用,则必须编写自己的应用程序级协议。例如