Java - TCP

Kategorie >>Programování>> Java - TCP


Nedávno jsem do školy na předmět počítačové sítě (Y36PSI) měl za úkol vytvořit program, který umožní přenos souboru. Jak klientskou část tak i serverovou. Nu a jelikož by to mělo běhat obecně pod jakýmkoliv systému, rozhodl jsem se to naprogramovat v Javě. Zde zdrojové kódy serveru a clienta.

 

Pro práci s Javou vřele doporučuju NetBeans. Pojďme se podívat jak jsem se s tím popral.

 

Princip klienta

je celkem jednoduchý. Připoji se na danou IP adresu a Port , které dostane z přikazové řádky jako argument, spolu se souborem který má být přenesen. Nu po připojení odešle název souboru a jeho velikost v bytech, kterýObrázek; bude přenášet. Vyčká zda-li to server, schválí, tj. odpoví OK. Pak začne s přenosem dat a po přenesení dat se ukončí.

 

Po rozbaleni zdrojových kódu naleznete 4 soubory.

Main.java

zde se celkem nic neděje, jen prostě načteme z přikazové řádky port, ip adresu serveru na který se chceme přípojit a dále cestu k souboru který chceme přenest. Poté vytvoříme nového klienta, kterému předáme ony informace.

 

Client.java

to je srdíčko našeho programu klienta. Jak vidíte implementuje (dědí) z Runnable , tudíž musí obsahovat metodu public void run() Jak tedy vidíme, klient si vytvoří v konstruktoru vlastní thread a jakousi instanci třídy TransferReader, která ma zaučel načítat data ze souboru a vracet jako pole bytu, podrobněji se tím budeme zabývat později.

 

Nejdůležitejsí pro nás je teda metoda run , v ní nejprve zkontrolujeme soubor, zda-li se ho povedlo otevřít, poté si incializujeme promenně které budeme potřebovat, jako např. Socket ke připojení k serveru, BufferedReader pro čtení a BufferedWriter pro zápis do socketu(odesílání a příjmaní ). Nu odešleme název souboru a jeho délku. Pak následuje nekonečná smyčka v které je jedna větev pro čtení zda-li server akceptuje náš požadavek a druhá pro vlastní odesíláni dat ze souboru.

 

Na závěr po sobě vše uklidime a ukonči se thread.

 

TransferReader 

dědí z TransferBase, která je stejná jak pro Server tak pro klient. Pomocí této třidy se prostě jen načítají data ze souboru,který dostane v konstructoru. Případně se detekujou chyby.  

 

TransferBase

Je základní třída, která drží data o souboru, jeho délky a aktualní pozice, v souboru. Nic víc to celkem neumí. 

 

Princip serveru

je o něco složitejší, ale jen nepatrně. Server po spuštění nastartuje a poslouchá na daném portu. Jakmile se k němu připojí klient, vytvoří pro něj thread a sám pokračuje v poslouchání na případné další klienty. No pro každého klienta se pak v onom threadu (vláknu) čeká až klient pošle zprávu obsahující informace o nazvu souboru a jeho velikosti. Server toto následně potvrdí zprávou obsahující OK. Nu a pak ukládá daná dana od klienta, až do velikosti kterou obdržel, nebo pokud se klient neodpojí. Následně ukončuje spojení s klientem, uzavíra socket atd.

 

Soubory a jejich naprogramování vysvětlím později.






Vloženo: 12.12.2007 18:39
Přečteno:3281
Autor: Martin Mizera

Hlasů: 14 Hodnocení(jako ve škole): 1.43
 

Komentáře (0)

   -     Nový Komentář