>> Home >> Java >> Java: Přenos souborů po síti

 

Java: Přenos souborů po síti

 

V tomto článku si ukážeme, jak je možné přenášet soubory (téměř jakkoliv objemné) po síti. Data se budou přenášet díky socketovému spojení. K tomuto přenosu jsem si připravil třídu, díky které bude přenos souborů téměř hračkou.

Na začátku třídy naleznete atributy, které iniciatizují různé proměnné a objekty. Poté následuje kontruktor této třídy, kterému předáváme instanci třídy socket. Dále třída obsahuje 2 metody. První metoda slouží k poslání souboru a druhá metoda k přijímání souboru. Tuto veřejnou třídu jsem pojmenoval NetFileTransfer.

Třída NetFileTransfer vypadá takto:


import java.io.*;
import java.net.*;

public class NetFileTransfer {

    //promenne a objekty
    private int i;
    private byte[] pole = new byte[16384];
    private File soubor;
    private BufferedInputStream vstup = null;
    private BufferedOutputStream vystup = null;
    private Socket soket = null;

    //konstruktor
    public NetFileTransfer(Socket sok) {
        this.soket = sok;
    }


    public void poslat(String s) {
        this.soubor = new File(s);
        try {
            vstup = new BufferedInputStream(new FileInputStream(soubor));
            vystup = new BufferedOutputStream(soket.getOutputStream());
            while((i = vstup.read(pole)) != -1) {
                vystup.write(pole, 0, i);
            }
            vystup.close();
            vstup.close();
        } catch(FileNotFoundException ex) {
            System.err.println(ex);
        } catch(IOException ex) {
            System.err.println(ex);
        }
    }

    public void prijmout(String s) {
        this.soubor = new File(s);
        try {
            vstup = new BufferedInputStream(soket.getInputStream());
            vystup = new BufferedOutputStream(new FileOutputStream("prijatysoubor"));
            while((i = vstup.read(pole)) != -1) {
                vystup.write(pole, 0, i);
            }
            vystup.close();
            vstup.close();
        } catch(FileNotFoundException ex) {
            System.err.println(ex);
        } catch(IOException ex) {
            System.err.println(ex);
        }
    }
}


 

Celou tuto třídu i s komentáři můžete stáhnout pro vlastní použití zde.

Nyní si ještě ukážeme, jak této třídy využít. Vytvoříme si dvě malé demonstrační aplikace. Jedna bude fungovat jako server a bude odesílat soubor klientské aplikaci.

 

Server část:

 

import java.io.*;
import java.net.*;


public class Main {
    public static void main(String[] args) throws IOException {
        final int port = 1542;
        ServerSocket serv = new ServerSocket(port);
        while(true) {
            Socket klient = serv.accept();
            NetFileTransfer n = new NetFileTransfer(klient);
            n.poslat("dd.jpg");
        }
    }
}

 

Zde jsme jen vytvořily objekt třídy ServerSocket a nekonečný cyklus, který čeká na připojení klienta. Když se klient připojí, tak se vytvoří objekt naší třídy NetFileTransfer a spustí se jeho metoda poslat, které předáváme parametr, že chceme poslat soubor s názvem dd.jpg.

 

Klient část:

 

import java.io.*;
import java.net.*;

public class Main {
    public static void main(String[] args) throws UnknownHostException, IOException {
        Socket soket = new Socket("127.0.0.1", 1542);
        NetFileTransfer n = new NetFileTransfer(soket);
        n.prijmout("prijatysoubor");
    }
}

 

V této klientské části se připojíme k naší server části, vytvoříme opět objekt naší třídy NetFileTransfer a spustíme metodu prijmout, které předáme název soubor, jak chceme přijímaný soubor pojmenovat.

Zde můžete stáhnout třídu NetFileTransfer.java.

 

pridej.cz Přidat.eu záložku

 

Diskuze k článku


 

Zatím žádné komentáže k tomuto článku.

 

Přidat nový komentář