# Testdatei senden



## holzer (21. Mrz 2004)

Hallo!!

Kann mir jemand ein kleines Codebeispiel geben, wie ich eine Datei zu nem Ftp-server sende? Anmelden und Directory wechseln is ja kein prob, aber wie sende ich dateien?

Vielen dank schonma.

holzer


----------



## Roar (21. Mrz 2004)

mit dem SEND command. anslo SEND an sen server schicken und danach die Datei. am ende glaub ich CRLFCRLF


----------



## Guest (21. Mrz 2004)

hmm... krieg ich so nicht hin. Kannst vielleicht mal ein codebeispiel posten?

thx


----------



## Roar (21. Mrz 2004)

hmm ich denke so sollte das gehen:

```
// out ist dein outputStream oder printStream oder was du verwendest an den server
String send = new String("SEND");
out.write(send.getBytes());
// und dann datei auslesen und genauso schreiben.
```

hmm ich weiß nicht so recht ob das geht. wahrscheinlich musst du noch den dateinamen an den ftp server senden oder so. google mal.


----------



## Ela (3. Apr 2004)

das wird so wohl nicht gehen ...
es ist also folgendermaßen:
1. der befehl zum hochladen eines files heißt STOR dateiname. dateiname ist einfach nur eiin name unter welchem das aufm server gepseichert werden soll.
2. jedem befehl, der das versenden von daten veranlasst (STOR, RETR, LIST) MUSS entweder der befehl PORT oder PASV vorausgehen, da die datenübertragung (je nachdem ob passiv oder aktiv) auf einem anderen port stattifndet. der port 21 ist nur der controlport. (man braucht da nur nach "passive mode ftp" oder so bei google zu suchen, da gibts mehr infos).
3. über den neuen socket müssen dann daten verschickt werden.

das kann man sich leicht machen und PASV benutzen -> nicht jeder server unterstützt das 

nur wie funktioniert das mit PORT??? ich hänge glaub ich schon seit 12 stunden dadran (mit ner schlafpause) und hab schon zig seiten angeschaut mit beispielen etc, aber es klappt nichts.

hier mal ein kleiner ausschnitt:


```
ServerSocket serverSocket=null;
      InetAddress myAddresse = InetAddress.getLocalHost();
      byte[] addresse = myAddresse.getAddress();
 
      String portCommand = "PORT ";
	  
	  try {
          serverSocket = new ServerSocket(0, 1);
	  }
	  catch (IOException io) {}
	  
 
          // append each byte of our address (comma-separated)
 
          for (int i = 0; i < addresse.length; i++)
          {
             portCommand = portCommand + (addresse[i] & 0xFF) + ",";
          }
 
          // append our server socket's port as two comma-separated
          // hex bytes

          portCommand = portCommand + ((serverSocket.getLocalPort() >>> 8) & 0xFF) + "," + (serverSocket.getLocalPort() & 0xFF);
      
      
      
      Socket data=null;
      
      try {
      data=serverSocket.accept();
      }
      catch (IOException io) {
      }
      

      // also das zum shcicken und lesen hab ich hier jetzt rausgeschnitten. das ist ja auchnet wichtig für das verbinden und
      // darum gehts erstmal.
      
      sendPort(portCommand);
      try {
      serverSocket.close();
      }
      catch (IOException io) {
      }
      
         
      
   }
   
   
   
   public void sendPort(String portcommand)
   {
      pout.println("PORT "+portcommand); // pout ist der outputstream am server-port 21. das wollte ichhier nur nicht auch                      //reinkopieren.  
      try{
     System.out.println(din.readLine()); // <- hier sollte eigentlich irgendwann mal was von "successfull" stehen .. *heul*
                                                    //  es kommt aber einfach nichts zurück. alles tot.
     }
     catch (IOException io) {
     }
   }
```

es will einfach nichts klappen. 
prinzipiell müsste man halt zum port 21 des servers den PORT befehl schicken, der ja dem server mitteilt, welcher gerade aufgemacht wurde für die daten. und nun müsste doch "200 PORT command successfull" zurückkommen. tut es aber nicht.
mein router hängt sich in 90% der fälle die ich ausprobiert habe, einfach auf. 
weiß einer vielleicht ne lösung? ich komme einfach nicht dahinter ...
mir würde es ja reichen, dass der server eben auf den von mir vorgegebenen datenport verbindung bekommt. dann wäre ich ein schritt weiter. um den eigentlichen datentransport kann man sich später gedanken machen. biiiiiiiiiiiiiiiiiiiiiiiteeeeeeeeeeeeeee helft mir .. 



mfg,
ela.


----------



## Ela (11. Apr 2004)

nur mal zur info falls es jemanden interessiert.
PORT hat nicht geklappt und wird auch nicht klappen wenn man das ganze hinter einem router macht, der alles filtert. daher am besten immer PASV nehmen, die meisten server sollten es untestützen ...

mfg,
ela.


----------

