Avatar billede kelmek Nybegynder
24. september 2003 - 14:18 Der er 14 kommentarer og
1 løsning

Uploade fil til FTP server - PORT Exception

Hej

Jeg sidder med en større app, hvor der skal uploades en fil til en ftpserver.

Jeg kan sagtens connecte, og blive valideret på serveren, men i det jeg kalder putFile metoden, og den kommer til den her linie:

TelnetOutputStream os=(TelnetOutputStream) put(remoteFile);

Smider den følgende fejl:

sun.net.ftp.FtpProtocolException: PORT :501 Active mode is disabled


    at sun.net.ftp.FtpClient.openDataConnection(FtpClient.java:381)

    at sun.net.ftp.FtpClient.get(FtpClient.java:485)

    at sun.net.ftp.FtpURLConnection.getInputStream" target="_blank">www.protocol.ftp.FtpURLConnection.getInputStream(FtpURLConnection.java:284)

    at FtpFile.<init>(FtpTest.java:22)

    at FtpTest.main(FtpTest.java:10)

Exception in thread "main" Process Exit...



Jeg sidder bag en firewall, ved ikke om det har noget at sige. Firewallen er naturligvis åben for ftp.

Jeg har smidt koden ind, herunder!

Nogen der har gode ideer eller løsningsforslag?

På forhånd tak!
      Jakob

------------------------------------------------------




import sun.net.ftp.*;

import sun.net.*;

import java.io.*;



public class FTPapp extends FtpClient

{

    private String serverName;

    private String userName;

    private String userPassword;



    public FTPapp (String serverName, String userName, String userPassword)

    {

        this.serverName = serverName;

        this.userName = userName;

        this.userPassword = userPassword;

    }




    /** putFile() -

        places a file to a remote server

    */

public boolean putFile(String localFile, String remoteFile, boolean ASCIIMode)

{

    try

    {

        // Open a connection to the server and login

        openServer(serverName);

        login(userName, userPassword);
       
        setConnectMode(FTPConnectMode.PASV);




        // Set the transfer mode

        if (ASCIIMode)

            ascii();

        else

            binary();


        // Get a handle to the remote file

        TelnetOutputStream os=(TelnetOutputStream) put(remoteFile);


        // Get a handle to the local file

        File file_in= new File(localFile);

        FileInputStream is= new FileInputStream(file_in);



        // Read the local file and write it remotely

        int c;

        int total_bytes=0;

        byte[] bytes = new byte[1024];


        while((c=is.read(bytes)) !=-1)

        {

            total_bytes +=c;

            os.write(bytes,0,c);

        }



        // Close everything and clean up

        is.close();

        os.close();

        closeServer();


        return (true);

    }

    catch (java.io.IOException e)

    {

        System.out.println (e.toString());

        return (false);

    }

}

}
Avatar billede kelmek Nybegynder
24. september 2003 - 14:21 #1
Sorry, jeg fik lige kopiret den forkerte fejl ind.

Den kommer kun med en enkelt linie

sun.net.ftp.FtpProtocolException: PORT :501 Active mode is disabled
Avatar billede arne_v Ekspert
24. september 2003 - 14:23 #2
1)  Lyder som om du bruger aktiv FTP og skal bruge passiv FTP.

2)  Hvad er det for en FTP pakke du bruger ?  (Apache Net Commons er
    rimelig god !)
Avatar billede arne_v Ekspert
24. september 2003 - 14:26 #3
re 1)

Du har jo faktisk:

setConnectMode(FTPConnectMode.PASV);

så det undrer mig at den tror du vil bruge active mode.
Avatar billede kelmek Nybegynder
24. september 2003 - 14:26 #4
1) Det er jeg også ved at finde ud af, jeg er stødt på det i min søgen på google. Problemet er bare at jeg ikke kan finde ud af at ændre til passiv...

2) Det er ftp'en som er integreret i java - den er bare godt gemt. Apache Net Commons, har du en url eller noget jeg kan kigge på?
Avatar billede arne_v Ekspert
24. september 2003 - 14:27 #5
Avatar billede kelmek Nybegynder
24. september 2003 - 14:28 #6
ups, netop den linie sad jeg og rodede med, da jeg bestemte mig til at stille spørgsmålet herinde. Den kan ikke kompiles med den linie, så den har jeg ikke i den kørende version. Jeg mangler en metode at sætte connection til passiv

tak - jeg kigger lige på det!
Avatar billede kelmek Nybegynder
24. september 2003 - 14:44 #7
hmmm - hvilke skal man hente inde på jakarta siden ? der er jo 100 forskellige downloads....
Avatar billede kelmek Nybegynder
24. september 2003 - 15:14 #9
Installeret og virker.... altså common net.. nu mangler jeg bare lidt eksempel kode, til at komme i gang på. Du skulle vel ikke lige have noget liggende, bare hvor jeg connecter, og henter / skriver en enkelt fil

Jeg har ikke lige helt gennemskuet opbygningen endnu :o)
Avatar billede arne_v Ekspert
24. september 2003 - 15:25 #10
Kun et GET eksempel. Og ikke med passiv.

Here it comes:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.SocketException;

import org.apache.commons.net.ftp.FTPClient;

public class FtpGet {
    public static void main(String[] args) {
        FTPClient client = new FTPClient();
        try {
            client.connect("192.168.1.10");
            client.login("anonymous", "arne@");
            InputStream is = client.retrieveFileStream("index.lis");
            OutputStream os = new FileOutputStream("C:\\index.lis");
            byte[] b = new byte[1000];
            int n;
            int total = 0;
            while((n = is.read(b)) >= 0) {
                os.write(b,0,n);
                total += n;
                System.out.println("bytes: " + total);
            }
            os.close();
            is.close();
            client.disconnect();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Avatar billede kelmek Nybegynder
24. september 2003 - 15:28 #11
Takker - Jeg har også lige siddet og kigget på docs - det burde være til at finde ud af nu..

Point på vej til dig!
Avatar billede kelmek Nybegynder
24. september 2003 - 15:28 #12
hvis du altså lige smider et svar :o)
Avatar billede arne_v Ekspert
24. september 2003 - 15:30 #13
Docs er her:
  http://jakarta.apache.org/commons/net/apidocs/index.html
men er også i ZIP filen.


client burde have en pasv metode til at sætte passiv mode.
Avatar billede kelmek Nybegynder
24. september 2003 - 15:31 #14
jep, jeg har sat den passiv - den hedder

client.enterLocalPassiveMode();
Avatar billede arne_v Ekspert
24. september 2003 - 15:45 #15
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester