Toon posts:

[Java] SimpleFTP werkt bij ene server wel, bij andere niet

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hey,

Ik heb een applicatie geschreven waarmee ik files op een ftp server wil zetten. Aangezien ik niets ken van sockets en dergelijke, doe ik het met SimpleFTP, die je hier vindt: http://www.jibble.org/simpleftp/ (code zit in de jar)
Alles werkt goed indien ik het op mijn telenet webspace wil zetten, wil ik het echter doen op de webspace van mijn scouts hun site (http://www.dezwaluw.org/), hetgeen mijn uiteindelijke doel is, krijg ik echter een IOException met volgende berichten:

Als ik exception.getMessage() doe krijg ik: "SimpleFTP received an unknown response when connecting to the FTP server: 220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------"
En: "java.io.IOException: SimpleFTP could not request passive mode: 220-This is a private system - No anonymous login"

Met wat gegoogle vind ik dat respone 220 betekent dat de verbinding succesvol was... In de code van SimpleFTP staat er
Java:
1
2
3
if (!response.startsWith("220 ")) {
            throw new IOException("SimpleFTP received an unknown response when connecting to the FTP server: " + response);
        }

Dus na die 220 moet er een spatie komen, hetgeen niet zo is met de huidige server ofzo....

Ik snap er dus niets van, heeft iemand hier ervaring mee en weet wat er fout gaat?

Acties:
  • 0 Henk 'm!

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 22:04
dit
220-This is a private system - No anonymous login

gaat fout

Strava | AP | IP | AW


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja dacht ik ook, maar ik doe helemaal geen anonymous login, ik geef mn username en paswoord mee (die zeker en vast kloppen)...

Acties:
  • 0 Henk 'm!

Verwijderd

1 .Misschien een te voor de handliggende suggestie, maar ik vraag het toch maar even:

ftp.connect("ftp.somewhere.net", 21, "username", "password");

heb je username en password aangepast aan die van de nieuwe server.
fout verwijst ernaar dat je zonder user en pass probeert in te loggen

2. heeft die Class ook een constructor waar je de poort even kan weglaten?

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op zondag 30 november 2008 @ 10:53:
Ja dacht ik ook, maar ik doe helemaal geen anonymous login, ik geef mn username en paswoord mee (die zeker en vast kloppen)...
ok ik was even te traag, had je antwoord nog niet gezien

Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 23:18

momania

iPhone 30! Bam!

Verwijderd schreef op zondag 30 november 2008 @ 10:31:
Ik snap er dus niets van, heeft iemand hier ervaring mee en weet wat er fout gaat?
Ik heb eens even snel door de code zitten neuzen, maar het is nogal een brak geheel ;)

Je ziet in je error message ook: "SimpleFTP could not request passive mode". Ofwel: de code probeert een file te uploaden naar de ftp in passive mode, die niet door die ftp wordt ondersteund. Ook ondersteund de huidige SimpleFTP code alleen maar passive mode en geen active mode, dus je zal naar iets anders moeten kijken.

Kijk bij voorkeur eens naar Apache Commons NET, en dan vooral FTPClient:
http://commons.apache.org...ns/net/ftp/FTPClient.html :Y)

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Alhoewel nee, die simpleftp maakt eerst een socket, en stuurt dan pas de user en pass door. De IOException gebeurt nadat de socket is gemaakt....

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public synchronized void connect(String host, int port, String user, String pass) throws IOException {
        if (socket != null) {
            throw new IOException("SimpleFTP is already connected. Disconnect first.");
        }
        socket = new Socket(host, port);
        reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        
        String response = readLine();
        if (!response.startsWith("220 ")) {
            throw new IOException("SimpleFTP received an unknown response when connecting to the FTP server: " + response);
        } //-->Dit gebeurt!
        
        sendLine("USER " + user);
        
        response = readLine();
        if (!response.startsWith("331 ")) {
            throw new IOException("SimpleFTP received an unknown response after sending the user: " + response);
        }
        
        sendLine("PASS " + pass);

         ....



edit: ok thx momania, zal ik eens checken :)

Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 22-09 21:34
Ik weet niet wat de afspraken zijn bij FTP connecties. Maar de FTP server geeft een response terug en dat is 220---blabla. Echter de SimpleFTP code gaat uit van 220[spatie]. Als je dat in je code eens veranderd in 220[zonderspatie]. Dan zou het in jou geval moeten lukken lijkt me. Echter is de portability vrijwel 0 aangezien het alleen werkt op de server van je scouting.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@Depress: Heb ik ook zitten doen, maar dan moest ik blijven foefelen met de spaties weg te laten bij al de responses, en dan gingen er nog dingen fout, dus ik ben maar gestopt aangezien ik maar in het donker aan het tasten was.


Het is mij gelukt een verbinding te maken mbv Apache Commons Net, maar het lukt mij niet goed om de file er op te zetten. Met SimpleFTP kon ik gewoon ftp.stor(File) doen, maar nu moet ik het met een OutputStream ofzo doen, door ftp.storeFileStream.
Maar als ik dit doe (zoals ik mijn file heb gemaakt):

Java:
1
2
3
4
5
6
7
8
OutputStream out = ftp.storeFileStream(takNaam+".txt");
BufferedWriter output = new BufferedWriter(new OutputStreamWriter(out));
for(int i = 0; i < n; i += 2){
    output.write("blabla");
    if(i != n - 2) output.newLine();
}
out.close();
ftp.disconnect();

Is de file leeg op de server...

Enige ideeën?

Acties:
  • 0 Henk 'm!

  • GrooV
  • Registratie: September 2004
  • Laatst online: 22:51
Verwijderd schreef op zondag 30 november 2008 @ 11:54:
...
Is de file leeg op de server...

Enige ideeën?
Wordt de data verbinding wel opgezet?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ah nee was ik vergeten, maar zelf met
Java:
1
ftp.enterLocalPassiveMode();

voordat ik de OutputStream doe, blijft de file leeg zijn...

Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 23:18

momania

iPhone 30! Bam!

Verwijderd schreef op zondag 30 november 2008 @ 11:54:
Is de file leeg op de server...

Enige ideeën?
OutputStream moet je wel flushen voordat je 'm sluit ;)

[edit]

Je moet trouwens je BufferedWriter flushen en closen, die is nml. om je OutputStream gewrapped.

[ Voor 19% gewijzigd door momania op 30-11-2008 12:52 ]

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Jaaa ofcourse ^^ Hoe snel ik al die dingen van writers en streams toch vergeet...
Het werkt dus, bedankt!

Trouwens net gelezen dat FTPClient vanzelf in active local data connection gaat :p

Acties:
  • 0 Henk 'm!

  • nxt
  • Registratie: November 2001
  • Laatst online: 24-08 15:34

nxt

Depress schreef op zondag 30 november 2008 @ 11:16:
Ik weet niet wat de afspraken zijn bij FTP connecties. Maar de FTP server geeft een response terug en dat is 220---blabla. Echter de SimpleFTP code gaat uit van 220[spatie]. Als je dat in je code eens veranderd in 220[zonderspatie]. Dan zou het in jou geval moeten lukken lijkt me. Echter is de portability vrijwel 0 aangezien het alleen werkt op de server van je scouting.
Volgens de RFC 959 geeft dat min teken aan dat het antwoord meerdere regels beslaat.
de eerste regel begint met code min (220- tekst) en de laatste regel met code spatie (220 tekst)

m.a.w. als je zo'n min teken tegenkomt dan horen alle daarop volgende regels t/m de regel die met dezelfde code gevolgd door een spatie begint.
Thus the format for multi-line replies is that the first line
will begin with the exact required reply code, followed
immediately by a Hyphen, "-" (also known as Minus), followed by
text. The last line will begin with the same code, followed
immediately by Space <SP>, optionally some text, and the Telnet
end-of-line code.
Pagina: 1