Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

FTP client - konektovanje na FTP server

[es] :: Java :: FTP client - konektovanje na FTP server

[ Pregleda: 2043 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

strain
Arandjelovac

Član broj: 60646
Poruke: 64
*.dynamic.isp.telekom.rs.



Profil

icon FTP client - konektovanje na FTP server20.03.2013. u 09:41 - pre 134 meseci
Pozdrav,

imam zadatak da napravim FTP client u Javi. Ne smem da koristim postojece implementacije samog FTP protokola, ali mogu da implementariam deo FTP protokola koji je potreban da bi se izvrsile osnovne FTP operacije koje program zahteva (FTP logovanje i FTP transfer datoteka).

Prvo mi nije jasno sta ovo znaci, odnosno sta smem da koristim a sta ne?

Druga stvar je to samo logovanje. Ja uspostavim vezu sa serverom pomocu ovog bloka ali kako da se ja ulogujem, sta treba da koristim da bi prosledio svoje podatke serveru radi logovanja i kasnije da pozove metodu koja ce da posalje neki file na njega.

Code:

        try {
            sock = new Socket(server, 21);
            System.out.println("Connected to " + server);
            FileInputStream fis = new FileInputStream(largeFile);
            OutputStream os = sock.getOutputStream();
            byte[] buffer = new byte[buffer_size];
        } catch(IOException e){
            System.err.println(e.getMessage());
            System.exit(1);
        }



za sada mi je cilj da se ulogujem na server i da posaljem jedan file. Posle toga cu da radim dalje odnosno treba dalje da implementiram da mogu istovremeno da posaljem do 5 file-ova (ja sam mislio preko Thread-ova) i da izvlacim neku statistiku odnosno koliko je vremena trebalo da se to uploaduje, prosecno vreme, brzina prenosa.

Svaka pomoc bi mi dobrodosla. Malo mi je konfuzna ova sama konekcija sa serverom. Ja sam radio nesto slicno kao skolski zadatak ali smo pisali i server i onda je mnogo lakse uklopiti sa clienta saljem jedan file ovamo ga prima server i odgovara. A nisam nikada pisao nista za postojeci server. Inace server sam napravio FileZila Server sa ip adresom i user i pass.
 
Odgovor na temu

bgd2500

Član broj: 55912
Poruke: 226
*.spielog2.rs.



+7 Profil

icon Re: FTP client - konektovanje na FTP server20.03.2013. u 11:55 - pre 134 meseci
Pogledaj specifikaciju FTP protokola, pa ces videti koje komande mozes da saljes i sta dobijas kao odgovor na njih.
http://www.w3.org/Protocols/rfc959/4_FileTransfer.html
 
Odgovor na temu

strain
Arandjelovac

Član broj: 60646
Poruke: 64
*.dynamic.isp.telekom.rs.



Profil

icon Re: FTP client - konektovanje na FTP server20.03.2013. u 16:01 - pre 134 meseci
Meni je problem kako da uradim logovanje korisnika. Dodje do ovog koda na filezilla serveru i ceka autentifikaciju odnosno stoji na Connecting to i posle nekog vremena pukne.

Kako ja da posaljem filezille-i korisnicke podatke da on verifikuje i posle primi file?

Code:

Socket sock = null;
            try {
                sock = new Socket(server, 21);
                System.out.println("Connecting to " + server.toString());
                
                
            } catch (IOException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
 
Odgovor na temu

bantu

Član broj: 38670
Poruke: 305
..ppoe.dyn.broadband.blic.net.



+27 Profil

icon Re: FTP client - konektovanje na FTP server20.03.2013. u 16:03 - pre 134 meseci
Prije nego sto ista krenes telnet-om ili nekim drugim programom se povezi na taj server po portu 21 i onda rucno mozes da kucas komande. Kada skontas kako komuniciras sa serverom onda lako implementujes taj protokol.
 
Odgovor na temu

strain
Arandjelovac

Član broj: 60646
Poruke: 64
*.dynamic.isp.telekom.rs.



Profil

icon Re: FTP client - konektovanje na FTP server20.03.2013. u 16:14 - pre 134 meseci
A kako da posaljem serveru komandu iz jave.

Kako ide prosta komanda npr komandu za user name?
 
Odgovor na temu

bantu

Član broj: 38670
Poruke: 305
89.111.240.*



+27 Profil

icon Re: FTP client - konektovanje na FTP server21.03.2013. u 12:02 - pre 134 meseci
Moraš malo više da se potrudiš. Treba prvenstveno da proučiš ftp protokol i rad sa java socket-ima i input i output stream-ovim, te sa thread-ovima ukoliko želiš da napraviš ozbiljnu mrežnu aplikaciju. Evo primjer za ono sto si trazio, probaj pa dalje nastavi sam, ako zapne negdje a ti pitaj.

Code:


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class FtpClient {

    public static void main(String[] args) {

        Socket clientSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;
        

        try {
            clientSocket = new Socket("ftp.mozilla.org", 21);
            out = new PrintWriter(clientSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));            

            String serverOutput;
            

            while ((serverOutput = in.readLine()) != null) {
                
                System.out.println("Server: " + serverOutput);            
                
                if (serverOutput.contains("Bye")) {
                    break;
                } else if (serverOutput.contains("550 Permission denied.")) {
                    out.println("USER anonymous");
                } else if (serverOutput.contains("331 Please specify the password.")) {
                    out.println("PASS [email protected]");
                } else if (serverOutput.contains("230 Login successful.")) {
                    out.println("PWD");                    
                 }                

            }

        } catch (UnknownHostException e) {
            e.printStackTrace();
            System.exit(1);
        } catch (IOException e) {
            e.printStackTrace();
            System.exit(1);
        } finally {
            out.close();
            try {
                in.close();
                
                clientSocket.close();
            } catch (IOException e) {                
                e.printStackTrace();
            }
            
        }

    }
}
 
Odgovor na temu

strain
Arandjelovac

Član broj: 60646
Poruke: 64
*.dynamic.isp.telekom.rs.



Profil

icon Re: FTP client - konektovanje na FTP server21.03.2013. u 15:10 - pre 134 meseci
Ok hvala na odgovoru. Posvetio sam se dosta dokumentaciji i nekim primerima sa interneta tako da polako resavam kada bude neki ozbiljan napredak okacicu kod.

Imam jedno pitanje da li neko zna sta znaci active i pasive transfer mode i nacin slanja binary ili ascii nije mi bas jasno sta je sta tu i da li to treba da implementiram.
 
Odgovor na temu

strain
Arandjelovac

Član broj: 60646
Poruke: 64
*.dynamic.isp.telekom.rs.



Profil

icon Re: FTP client - konektovanje na FTP server21.03.2013. u 21:58 - pre 134 meseci
Napredujem lepo sa ovim FTP Clientom mogu vam reci i dosta su mi pomogli saveti da vise obratim paznju na FTP dokumentaciju kao i ovo sto je bantu napisao.

Sada imam novi problem.

Kada prebacujem file sa client-a na server ako taj file ne postoji na serveru sve prodje extra, ali ako postoji javi se greska 550 Premission denied, ja obrisem sa servera probam ponovo radi ali ako pokrenem ponovo a file je vec na serveru opet greska.

Kod sa kojim kopiram file je sledeci:

Code:

public void dataTransfer(String path) {
        String resp;
        /* send the file */
        out.println("STOR " + path);

        resp = getResponse();

        BufferedInputStream bis;
        int bytesRead;
        byte[] buffer = new byte[1024];
        try {
            bis = new BufferedInputStream(new FileInputStream(path));

            for (bytesRead = bis.read(buffer); bytesRead >= 0; bytesRead = bis.read(buffer)) {
                passiveOut.write(buffer, 0, bytesRead);
            }

        } catch (IOException e) {
            System.err.println("Error writting file: " + e.getMessage());
        }
        System.out.println("Data transfer");
    }


dok je deo main klase koja sve to pokrece

Code:

    public Main() {

        userName = "marko";
        password = "marko";
        server = "127.0.0.1";
        file = "text.txt";

        connection = new FtpConnection(server);
        if (connection.isAlive()) {
            connection.user(userName);
            while (!connection.getResponse().startsWith("331")) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException ex) {
                    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            connection.pass(password);

            connection.setupTransferMode(server);
            connection.dataTransfer(file);
            
            connection.closeTransferMode();
        }
    }

vrednosti za user, password, server i file sam stavio zbog testiranja oni ce se ucitavati u zavisnosti od toga sta korisnik unese.

Zbog cega mi se javlja greska 550 kada file vec postoji, a koliko sam video u dokumentaciji komanda STOR snima podatke preko file-a ako vec postoji.

Citat:

STORE (STOR)

This command causes the server-DTP to accept the data
transferred via the data connection and to store the data as
a file at the server site. If the file specified in the
pathname exists at the server site, then its contents shall
be replaced by the data being transferred. A new file is
created at the server site if the file specified in the
pathname does not already exist.
 
Odgovor na temu

[es] :: Java :: FTP client - konektovanje na FTP server

[ Pregleda: 2043 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.