很长一段时间以来,我一直在努力在 Android 应用程序中处理 TFTP 协议。其主要功能是从托管 TFTP 服务器的定制设计设备下载文件。
我正在浏览互联网,希望找到一些好的、已经编写好的实现。首先,我尝试使用 TFTP 库,它是 Apache Commons 的一部分。不幸的是没有运气 - 不断超时甚至完全冻结。经过进一步研究,我在 github 上找到了一些代码 -请看一下。我已经采用了 Android 代码,经过一些调整,我终于收到了一些文件。
该设备的创建者表示,块大小应该正好是 1015 字节。所以我将包大小增加到1015并更新了创建读取请求包的方法:
DatagramPacket createReadRequestPacket(String strFileName) {
byte[] filename = strFileName.getBytes();
byte[] mode = currentMode.getBytes();
int len = rOpCode.length + filename.length + mode.length + 2;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(len);
try {
outputStream.write(rOpCode);
outputStream.write(filename);
byte term = 0;
outputStream.write(term);
outputStream.write(mode); // "octet"
outputStream.write(term);
outputStream.write("blksize".getBytes());
outputStream.write(term);
outputStream.write("1015".getBytes());
outputStream.write(term);
} catch (IOException e) {
e.printStackTrace();
}
byte[] readPacketArray = outputStream.toByteArray();
return new DatagramPacket(readPacketArray, readPacketArray.length, serverAddr, port);
}
正在下载块,但有一个主要问题 - 我下载的文件是分成几部分的,每个部分 512kB(除了最后一个),而我在 Android 设备上收到的每个部分大约大 0.5kB。看起来好像每次多一个字节或者多一整个附加。显然我不完全理解它并且我错过了一些东西。
至尊宝的传说
相关分类