Неверный исходный порт (69) в ответе на запрос. TFTP отправить файл

Я пытаюсь выполнить эту команду отправки 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 использует порт случайным образом для отправки данных в первом фрейме строки. Я думаю, именно поэтому у меня есть это сообщение об ошибке. Как вы могли бы изменить этот исходный порт? Или это другая проблема, которая вызывает эту ошибку?

Заранее спасибо.


person Jairo Ernesto Sánchez Galvis    schedule 09.05.2017    source источник


Ответы (1)


Как обходной путь. Я использовал это для выполнения команды Windows DOS на Java.

try {
    Process proceso = Runtime.getRuntime().exec("tftp -i 192.168.1.13 put 
file1.romz file1.romz");
} catch (IOException e) {
    e.printStackTrace();
}
person Jairo Ernesto Sánchez Galvis    schedule 15.05.2017