Aktive FTP-Verbindung wird nicht akzeptiert

Bacardi1539

Grünschnabel
Einen wunderschönen guten Tag und Malzeit wünsche ich euch allen :)

Ich habe folgendes Problem:

Ich bin dabei einen FTP-Client zu basteln. Der Pasive Modus funktioniert einwand frei ABER der aktive Modus will nicht so wie ich. Der FTP-Server gibt mir nach dem STOR Befehl immer die Meldung 425 Can't open data connection!

Kurz vorweg: ICH WILL HIER NICHT MIT EINEM VORDEFINIERTEN CLIENT ARBEITEN WIE "FTP4J", "Apache Commons Net" oder dem "JavaFTPClient".
Er soll komplett selbst geschrieben sein.

Ich habe die Socketverbindung auch soweit aufgebaut. Login geht auch wunderbar. Nicht wundern: Im nachfolgenden Code habe ich keine Sicherheitsabfragen, da ich erstmal nur die Funktionen an sich testen möchte. Ich habe einen localen FTP Server von FileZilla offen. Wenn ich über "FTP4J" die Verbindung aufbaue klappt es. Ich sitze nun schon 4 Wochen an diesem beschi**enen Fehler! Ach ja und ich verwende NetBeans 7.2

Hier der Code:
Java:
package lalalatest;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;


public class LalalaTest {

  static PrintWriter writeCodeToFTP;

  public static void main(String[] args) throws InterruptedException {

      try {
        uploadFile();
      } catch (IOException ex) {
        System.err.println("NO ");
        Logger.getLogger(LalalaTest.class.getName()).log(Level.SEVERE, null, ex);
      }
  }

  public static void uploadFile() throws IOException {

    Socket messageConnection = new Socket("localhost", 21);
    writeCodeToFTP = new PrintWriter(messageConnection.getOutputStream(), true);
    issueCommand("USER *******");
    issueCommand("PASS *******");
    issueCommand("FEAT");
    issueCommand("OPTS UTF8 ON");
    issueCommand("TYPE A");
    ServerSocket portSocket;
    Socket clientSocket = null;
    String portCmd;

    portSocket = new ServerSocket(0, 1);
    portSocket.setReceiveBufferSize(512 * 1024);

    InetAddress myAddress = InetAddress.getLocalHost();
    int myPort = portSocket.getLocalPort();

    portCmd = "PORT " + myAddress + "." + (myPort / 256) + "." + (myPort % 256);
    issueCommand(portCmd);
    issueCommand("REST 0");
    issueCommand("STOR TEST.txt");

    portSocket.setSoTimeout(5000);


    clientSocket = portSocket.accept();

    if (clientSocket.isConnected()) {
      System.err.println("JO " + clientSocket);
    }
  }

  private static void issueCommand(String code) {

    writeCodeToFTP.println(code);
  }
}
 
Zuletzt bearbeitet:
Gut.. also Danke für die vielen Antworten... :D

Mein Problem lag an der InetAddress Variable "myAddress". Ich habe vergessen dort hinter .getHostAddress() aufzurufen.. Bescheuerter Fehler aber schwer zu finden, da mir der FTP den Rückgabewert "Port command successfull" zurück gegeben hat.

Nun tritt aber eine neue, wunderliche Sache auf:
Führe ich die Klasse dierekt aus (Rechtsklick und "run File") funktioniert es so wie eingegeben. Der Portbefehl wird mit der IP meines Rechners gefüllt und abgeschickt.

Starte ich die Klasse in einem Programm, so brauche ich aber die locale IP 127.0.0.1, ansonsten geht es wieder nicht.

Sehr sehr seltsam alles..

Mal sehn ob nun jmd bescheit weiß...

;)
 

Neue Beiträge

Zurück