Я пытаюсь выполнить эту команду отправки TFTP DOS с помощью TFTP-клиента в Java:
tftp -i 192.168.1.13 put file1.romz file1.romz
Это означает отправить файл file1.romz на хост: 192.168.1.13 в бинарном виде и переименовать файл, когда он прибудет в file1.romz. О команде TFTP DOS.
Это код:
import java.io.FileInputStream;
import java.io.IOException;
import java.net.SocketException;
import java.net.UnknownHostException;
import org.apache.commons.net.tftp.TFTP;
import org.apache.commons.net.tftp.TFTPClient;
public class TFTPClientToSend {
public final static void main(String[] args) {
boolean closed;
int transferMode = TFTP.BINARY_MODE;
String hostname, localFilename, remoteFilename;
TFTPClient tftp;
// Get host and file arguments
hostname = "192.168.1.13";
localFilename = "file1.romz";
remoteFilename = "file1.romz";
// Create our TFTP instance to handle the file transfer.
tftp = new TFTPClient();
// We want to timeout if a response takes longer than 60 seconds
tftp.setDefaultTimeout(60000);
// Open local socket
try {
tftp.open();
} catch (SocketException e) {
System.err.println("Error: could not open local UDP socket.");
System.err.println(e.getMessage());
System.exit(1);
}
// We haven't closed the local file yet.
closed = false;
// We're sending a file
FileInputStream input = null;
// Try to open local file for reading
try {
input = new FileInputStream(localFilename);
} catch (IOException e) {
tftp.close();
System.err.println("Error: could not open local file for reading.");
System.err.println(e.getMessage());
System.exit(1);
}
// Try to send local file via TFTP
try {
tftp.sendFile(remoteFilename, transferMode, input, hostname, 69);
} catch (UnknownHostException e) {
System.err.println("Error: could not resolve hostname.");
System.err.println(e.getMessage());
System.exit(1);
} catch (IOException e) {
System.err.println(
"Error: I/O exception occurred while sending file.");
System.err.println(e.getMessage());
System.exit(1);
} finally {
// Close local socket and input file
tftp.close();
try {
input.close();
closed = true;
} catch (IOException e) {
closed = false;
System.err.println("Error: error closing file.");
System.err.println(e.getMessage());
}
}
if (!closed) {
System.exit(1);
}
}
}
Поля правильные, но я получаю следующее сообщение об ошибке:
Error: I/O exception occurred while sending file.
Incorrect source port (69) in request reply.
Порт TFTP UDP официально имеет номер 69. Брандмауэр Windows отключен, а сервер TFTP Lantronix позволяет обновлять новую прошивку по TFTP. Java использует порт случайным образом для отправки данных в первом фрейме строки. Я думаю, именно поэтому у меня есть это сообщение об ошибке. Как вы могли бы изменить этот исходный порт? Или это другая проблема, которая вызывает эту ошибку?
Заранее спасибо.