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.
