TCP/IP kapcsolat Java nyelven



Hasonló dokumentumok
Java programozási nyelv 10. rész Input/output kezelés

Ja J v a a v a há h l á óz ó a z t a i al a ka k l a maz ma á z s á o s k o Socket, URL

Programozási nyelvek Java

JAVA ALKALMAZÁSOK 5. ELŐADÁS 1/9/2017 1

URL-LEL ADOTT OBJEKTUM LETÖLTÉSE (1) URL-LEL ADOTT OBJEKTUM LETÖLTÉSE

Abstract osztályok és interface-ek. 7-dik gyakorlat

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

A Java nyelv IV. rész - appletek, hálózati alkalmazások fejlesztése

Számítógépes Hálózatok. 5. gyakorlat

Java gyakorlat feladatai e s megolda sai ( )

Az új be- és kimenet könyvtár

Kommunikáció Androidon Mobilinternet Wifi

Számítógépes Hálózatok GY 7.hét

Számítógépes Hálózatok GY 6.hét

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Segédanyag: Java alkalmazások gyakorlat

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Programozási nyelvek II.: JAVA

JAVA PROGRAMOZÁS 8.ELŐADÁS

Programozás I. 8. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Hálózati architektúrák laborgyakorlat

Java programozási nyelv

Programozási technológia

Már megismert fogalmak áttekintése

Kommunikáció - Wi-Fi, Mobil internet - Bluetooth - GSM / GPRS és SMS - NFC

Java Servlet technológia

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Számítógépes hálózatok

(J\V]HU&NOLHQVV]HUYHUUHQGV]HUHN

Osztályszintű elérés, kivételkezelés, fájlkezelés

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Számítógépes Hálózatok. 7. gyakorlat

Kommunikáció. Távoli eljáráshívás. RPC kommunikáció menete DCE RPC (1) RPC - paraméterátadás. 3. előadás Protokollok. 2. rész

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Kivételkezelés, naplózás. Exception handling, logging

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Informatika terméktervezőknek

Számítógépes Hálózatok. 3. gyakorlat

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Pénzügyi algoritmusok

Számítógépes Hálózatok GY 3-4.hét

Programozási nyelvek Java

A Java programozási nyelv

Programozási technológia 2.

Interfészek. PPT 2007/2008 tavasz.

Reader /Writer InputStreamReader, OutputStreamWriter

Objektumorientált programozás C# nyelven

Segédanyag: Java alkalmazások gyakorlat

Programozási nyelvek Java

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció

BEÁGYAZOTT RENDSZEREK TERVEZÉSE UDP csomag küldése és fogadása beágyazott rendszerrel példa

OOP: Java 8.Gy: Abstract osztályok, interfészek

Hálózatkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Hálózatkezelés / 20

Programozás II. 2. Dr. Iványi Péter

Be- és kimenet kezelése

Java grafikai lehetőségek

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Számítógép-hálózatok: 4. Labor. TCP kliens. A gyakorlat célja:

Segédanyag: Java alkalmazások gyakorlat

JAVA PROGRAMOZÁS 7.ELŐADÁS

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Debreceni Egyetem Informatika Kar. Mobiltelefon programozás és mobil adatbázis-kezelés

Java hálózatkezelés II. szerver-kliens kapcsolat szálkezelés JAVA PROGRAMOZÁS 10. GYAKORLAT

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Kommunikáció Androidon Mobilinternet Wifi

ELTE SAP Excellence Center Oktatóanyag 1

Kommunikáció. Folyamatok közötti kommunikáció. Minden elosztott rendszer alapja

COMET webalkalmazás fejlesztés. Tóth Ádám Jasmin Media Group

Szervlet-JSP együttműködés

C# Szálkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Szálkezelés / 21

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Bevezető. Servlet alapgondolatok

Java programozási nyelv 4. rész Osztályok II.

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

JAVA SE/ME tanfolyam tematika

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

OOP és UML Áttekintés

Input Output Műveletek

Jelszavak helyes megválasztása, szótáras törés. Pánczél Zoltán

Osztálytervezés és implementációs ajánlások

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

Osztálytervezés és implementációs ajánlások

Programozás II. ATM példa Dr. Iványi Péter

13. Állományok, bejegyzések 14. Folyamok 15. Közvetlen hozzáférésű állomány. Programozási technológia (Java) - III. / 1

Számítógépes hálózatok

Példaprogramok Android alá (Lista, mentés, visszatöltés, pattogó android figura) Android alapok. Android játékfejlesztés.

Osztályok. 4. gyakorlat

A Jáva programozási nyelv rejtelmei

III. Felzárkóztató mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

Java IX. telkezelés a Java-ban

Java II. I A Java programozási nyelv alapelemei

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Objektumorientált programozás C# nyelven III.

MKOSZ Online Support - Felhasználói

Java IX. telkezelés a Java-ban

G Data MasterAdmin 9 0 _ 09 _ _ # r_ e p a P ch e T 1

Dr. Varga Imre. Socket-programozás. C nyelven

Átírás:

Java programozási nyelv 2007-2008/ősz 5. óra TCP/IP kapcsolat Java nyelven Java streamek, szűrők, java.io TCP/IP alapú kommunikáció Egyszerű protokoll tervezése legradi.gabor@nik.bmf.hu szenasi.sandor@nik.bmf.hu

TCP/IP kapcsolat Java nyelven Témakörök Streamek kezelése Javában Szűrők és használatuk TCP/IP kapcsolat felépítése TCP/IP a szerver oldalon Kliens/szerver alkalmazás megvalósítása 2

Streamek kezelése Javában Streamek: adatfolyamok, amelyeken keresztül lehetőségünk van adatokat írni/olvasni A java.io csomag tartalmazza a szükséges osztályokat A streamek használata hasonló a C#-ban tanultakhoz Egy stream életciklusa: Megnyitás A megfelelő stream-osztály példányosításával. (Általában a konstruktornak átadott paraméterek segítségével jelöljük ki az elérni szánt médiát) Írás/olvasás A stream megfelelő metódusai segítségével Bezárás A stream objektum close() metódusával 3

Streamszervezési módok A streamek őseik alapján két csoportba oszthatók Byte szervezésű streamek (InputStream/OutputStream leszármazottai) A legkisebb egység a byte. Ezeket tudjuk írni/olvasni a csatornán keresztül Karakter szervezésű streamek (Reader/Writer leszármazottai) A legkisebb egység a Unicode karakter. Ezeket tudjuk írni/olvasni a csatornán keresztül. Fontos különbség, hogy a karakter szervezésű streamek működésük során figyelembe veszik a különböző kódolások sajátosságait 4

Kommunikáció streameken keresztül Az absztrakt ősosztályok definiálják az alapvető írási műveleteket Byte szervezésű stream (OutputStream) write(int a) throws IOException write(byte b[]) throws IOException write(byte b[], int off, int len) throws IOException Karakter szervezésű stream (Writer) write(int c) throws IOException write(char c[]) throws IOException write(char c[], int off, int len) throws IOException write(string s) Puffer ürítése A flush() metódus segítségével Stream lezárásakor automatikusan meghívódik 5

Kommunikáció streameken keresztül Byte szervezésű stream (InputStream) int read() throws IOException int read(byte c[]) throws IOException int read(byte c[], int off, int len) throws IOException Karakter szervezésű stream (Reader) int read() throws IOException int read(char c[]) throws IOException int read(char c[], int off, int len) throws IOException Visszatérési érték a beolvasott elemek száma Állapot Új adat érkezett Adatfolyam vége Nincs adat Visszatérési érték A beérkező szám/karakter kódja -1 A stream blokkolódik, várakozik a következő küldeményig 6

Kommunikáció streameken keresztül Példa stream másolása public static void masol(inputstream in, OutputStream out) { try { int b; while (b = in.read read()!= -1) out.write write(b); out.flush flush(); } catch (IOException e) { System.out.println println(e.getmessage getmessage()); } } 7

Leképezés fizikai adatszerkezetre Fájlokra leképező osztályok Karakter: FileReader/FileWriter Byte: FileInputReader/FileOutputStream Lehetséges konstruktorok FileReader(String filenév) throws FileNotFoundException FileReader(File file) throws FileNotFoundException FileReader(FileDescriptor fd) Csövekre leképező osztályok PipedInputStream/PipedOutputStream PipedReader/PipedWriter Tömbökre leképező osztályok pl. CharArrayWriter stb. 8

TCP/IP kapcsolat Java nyelven Témakörök Streamek kezelése Javában Szűrők és használatuk TCP/IP kapcsolat felépítése TCP/IP a szerver oldalon Kliens/szerver alkalmazás megvalósítása 9

Szűrők alapvető szerepe A szűrők nem közvetlenül egy fizikai médiumhoz kapcsolódnak, hanem egy másik streamhez, ezzel segítik elő az adatfolyam magasabb szintű kezelhetőségét A szűrők is a stream osztályok leszármazottai, ezért ők is csatornaként használhatók (így akár egymás után több szűrő is kapcsolható) Reader Writer AB A B C Filter Reader Writer BC A Filter A B C 10

Szűrők használata Szűrő objektumok létrehozásakor általában a konstruktorban kell átadni azt a csatornát, amelyik felett szeretnénk a szűrőt használni FileOutputStream fout = new FileOutputStream(... ); DataOutputStream dos = new DataOutputStream(fout); A szűrők egymásba is ágyazhatók (delegáció), de egy csatornához közvetlenül ne rendeljünk több szűrőt (amennyiben mégis, a flush()-el nekünk kell elkerülni a pufferelésből adódó problémákat) Hasonló okból használat során már csak a szűrőn keresztül férjünk hozzá a csatornához dos.writefloat(...); Lezáráskor elég a szűrőt lezárni, ez elvégzi a csatorna lezárását is dos.close(); 11

Java alaptípusok írása/olvasása A DataOutputStream szűrővel van lehetőség a Java alaptípusok írására byte típusú csatornára public void writeint(int v) throws IOException public void writefloat(float v) throws IOException public void writechar(char v) throws IOException... A DataInputStream szűrővel van lehetőség az így kiírt alaptípusok beolvasására egy byte szervezésű csatornából public int readint() throws IOException public float readfloat() throws IOException public char readchar() throws IOException... 12

Szöveges formában írás A PrintWriter szűrővel van lehetőség egy karakteres csatornára szöveges formában írni a Java alaptípusokat Kiírás után soremeléssel: public void println(int v) throws IOException public void println(float v) throws IOException public void println(string v) throws IOException... Soremelés nélkül: public void print(int v) throws IOException public void print(float v) throws IOException public void print(string v) throws IOException... 13

Szöveges formában olvasás A PrintWriter-nek nincs párja. Az általa írt adatokat célszerű a BufferedReader szűrővel feldolgozni (ami karakter szervezésű csatornákon tud csak dolgozni) public char read () throws IOException Egy karakter beolvasása public string readline() throws IOException Egy sor beolvasása Egy LineNumberReader szűrő közbeiktatásával számolhatjuk a bemeneti karakter szervezésű csatorna sorait is public int getlinenumber() Olvasás közben számolja, hogy hányadik sorban jár, ezt a számot adja vissza ez a metódus 14

További szűrők Bytecsatorna feletti karaktercsatorna InputStreamReader/OutputStreamWriter Konstruktoruk egy byte szervezésű stream objektumot vár, ők pedig karakteres streamként kezelhetők. Így tudunk byte szervezésű adatfolyamot karakteresként kezelni. Ha szükséges, a konstruktorban van lehetőség kódtábla megadására is. Tömörítés ZipInputStream/ZipOutputStream GZIPInputStream/GZIPOutputStream Ellenőrzött átvitel CheckedInputStream/CheckedOutputStream Titkosítás CipherInputStream/CipherOutputStream Objektumok továbbítása ObjectInputStream/ObjectOutputStream 15

TCP/IP kapcsolat Java nyelven Témakörök Streamek kezelése Javában Szűrők és használatuk TCP/IP kapcsolat felépítése TCP/IP a szerver oldalon Kliens/szerver alkalmazás megvalósítása 16

TCP/IP kapcsolat TCP alapú kommunikáció socketeken keresztül zajlik. Egy socketet az IP cím és a portszám azonosít egyértelműen A szerver és a kliens csak a kapcsolat felvételének módjában különbözik egymástól (kliens kezdeményez, a szerver pedig fogadja a kapcsolatot) A kapcsolat felépítését követően a két fél már egyenrangúnak tekinthető, mindkét oldalon ugyanolyan socketek biztosítják a kommunikációt Ezt jól mutatja, hogy az implementáció során is ugyanazt a Socket osztályt használjuk a kliens és a szerver alkalmazás elkészítése során 17

TCP kapcsolat felépítése A java.net csomag tartalmazza a hálózati kapcsolathoz szükséges osztályokat URL kezelés TCP kapcsolat kezelése UDP kapcsolat kezelése (nem foglalkozunk vele) A Socket osztály segítségével van lehetőség TCP alapú kapcsolat felépítésére A kapcsolat felépítését követően mindkét oldalon a létrejövő Socket objektumokon keresztül elérhető egyegy kimeneti/bemeneti stream, ezeken keresztül lehet a kommunikációt lefolytatni Szerver IP:15.6.8.6 port: 4520 port: 4521 port: 6621 port: 6622 Kliens IP:12.2.6.5 port: 4522 Socket InputStream InputStream port: 6623 Socket OutputStream OutputStream port: 4523 port: 6624 18

Socket osztály Kapcsolat felépítése a streamekhez hasonlóan a konstruktor meghívásakor történik az átadott paraméterek szerint public Socket(String host, int port) throws UnknownHostException, IOException A host lehet 192.168.0.5 vagy www.bmf.hu alakú A portszám egy egész szám 1 és 65535 között A kapcsolat felépítését követően az alábbi metódusokkal lehet hozzáférni a csatornákhoz public InputStream getinputstream() throws IOException public OutputStream getoutputstream() throws IOException Kommunikáció és a csatornák lezárása public void close() throws IOException 19

Socket osztály A létrehozott kapcsolat adatai lekérdezhetőek public InetAddress getinetaddress() Távoli gép címe public InetAddress getlocaladdress() Helyi gép címe public int getport() Távoli gépen nyitott port száma public int getlocalport() Helyi gépen nyitott port száma A kapcsolat állapotával kapcsolatos adatok public boolean isconnected() public boolean isclosed() public boolean isinputshutdown() public boolean isoutputshutdown() 20

Kliens oldali kommunikáció Példa: kliens oldali kapcsolatfelvétel try { Socket s = new Socket("ultra.obuda.kando.hu", 7); InputStream is = s.getinputstream getinputstream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); OutputStream os = s.getoutputstream getoutputstream(); PrintWriter pw = new PrintWriter(os); pw.println println("echo"); pw.flush flush(); String answer = br.readline readline(); System.out.println println(answer); s.close close(); } catch (Exception e) { } System.out.println println(e.getmessage getmessage()); 21

TCP/IP kapcsolat Java nyelven Témakörök Streamek kezelése Javában Szűrők és használatuk TCP/IP kapcsolat felépítése TCP/IP a szerver oldalon Kliens/szerver alkalmazás megvalósítása 22

Szerver oldali implementáció A kapcsolatot mindig a kliens kezdeményezi, ezért a kliens oldali Socket objektum létrehozása egybeesik a kapcsolat kiépítésével A kapcsolat mindkét oldalán ugyanolyan Socket objektumokra van szükség, értelemszerűen ugyanabban az időpillanatban kell létrejönniük, ezt azonban meglehetősen nehéz lenne implementálni az eddigi eszközeinkkel Ezért rendelkezésre áll egy ServerSocket osztály, amelynek példányaival a szerver oldalon van lehetőségünk folyamatosan figyelni egy portot, hogy mikor érkezik be a következő kérés egy klienstől Amennyiben egy kliens csatlakozik ehhez a porthoz, akkor a ServerSocket objektum létrehoz egy Socket objektumot, amin keresztül maga a kommunikáció a már megismert módon végrehajtható 23

ServerSocket osztály Az ServerSocket objektum példányosításakor a konstruktorban kell átadni a figyelendő port számát public ServerSocket(int port) throws IOException A port paraméter a figyelni kívánt port száma. Ha az átadott paraméter 0, akkor szabadon választ egyet az aktuálisan szabad portok közül. Ebben az esetben a szerver indítását követően a tulajdonságai közül lehet lekérdezni, hogy milyen porton indult el public ServerSocket(int port, int backlog) throws IOException Amíg az utoljára beérkező kapcsolat kezelése miatt a ServerSocket objektum nem kapja vissza a vezérlést, egy várakozási sorba gyűjti a beérkező kapcsolódási kéréseket. A fentihez hasonló port utáni backlog paraméter határozza meg ennek a sornak a méretét. Az ebbe nem férő kéréseket elutasítja A ServerSocket objektum lezárása public void close() throws IOException 24

ServerSocket figyelő aktiválása A példányosított ServerSocket objektum nem kezdi el azonnal a port figyelését. Erre szolgál az alábbi metódus public Socket accept() throws IOException A metódus meghívása blokkolja a program futását egészen addig, amíg nem érkezik be egy kérés Kérés beérkezése esetén a metódus visszatérési értéke egy Socket objektum, amin keresztül hozzáférhetők a kliens adatai, illetve a kommunikációhoz szükséges streamek A beérkező kérés után a blokkolás megszűnik és a program fut tovább, a következő kliens kiszolgálásához újra meg kell hívni az accept() metódust. Ezért célszerű Az accept() hívásokat és a kérések kiszolgálását ciklusba szervezni A kliensek kiszolgálását egy külön szálban elvégezni, hogy ezzel párhuzamosan a ServerSocket újra képes legyen figyelni a portot Az accept() hívásokat is egy háttérben futó szálon futtatni, ha nem szeretnénk emiatt blokkolni a teljes alkalmazásunkat 25

Szerver oldali kommunikáció Példa: az echo protokoll megvalósítása try { ServerSocket ss = new ServerSocket(7); while (true) { Socket s = ss.accept accept(); InputStream is = s.getinputstream getinputstream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); OutputStream os = s.getoutputstream getoutputstream(); PrintWriter bos = new PrintWriter(os); String question = br.readline readline(); bos.println println(question); bos.flush flush(); s.close close(); } } catch (Exception e) { System.out.println println(e.getmessage()); } 26

TCP/IP kapcsolat Java nyelven Témakörök Streamek kezelése Javában Szűrők és használatuk TCP/IP kapcsolat felépítése TCP/IP a szerver oldalon Kliens/szerver alkalmazás megvalósítása 27

Egyszerű protokoll tervezése A szerver és a kliens közötti kommunikáció tetszőleges lehet, de időben össze kell hangolni a kettő működését Értelemszerűen amit küld a kliens, azt olvasnia kell a szervernek. Amit pedig a szerver küld, annak a fogadására fel kell készülnie a kliensnek Egy egyszerű protokoll keretein belül célszerű rögzíteni az írások/olvasások Időbeni sorrendjét Irányát Adatok típusát, értelmezési módját A protokoll megtervezése után jól elkülönülnek egymástól a kliens és a szerver feladatai, így ezeket már egymástól függetlenül is egyszerűen lehet implementálni Készítsünk egy kliens/szerver alkalmazást, ahol a kapcsolat kiépítését követően a kliens átküld a szervernek néhány stringet, majd a szerver ezek közül visszaküldi a kliens számára a leghosszabbat! 28

Esettanulmány A szervernek és a kliensnek kell-e azonosítaniuk egymást? Amennyiben a szerver egyszerre több szolgáltatást is nyújt ugyanazon a porton, akkor hogyan lehet közülük választani? A funkció tisztázását követően a kliensnek el kell küldenie a szerver számára a vizsgálandó stringeket. Honnan tudja a szerver, hogy hány stringet kell fogadnia? pl. a kliens küldés előtt elküldi ezt a számot pl. a kliens az utolsó string elküldése után elküld egy előre egyeztetett jelet, ezzel jelezve, hogy nem akar többet küldeni Milyen formában küldjük át ezeket a stringeket? pl. karakterenként valamilyen lezáró jellel pl. valamilyen szűrőket használva, amik támogatják a sorok küldését/fogadását A szerver milyen formában válaszoljon? A szerver válasza után bontsák a kapcsolatot, vagy egyéb műveletek következhetnek? 29

Esettanulmány egy lehetséges megoldás A fenti feladatot megvalósító protokoll Kliens oldalon 1. A kapcsolat felépítése 2. Stringek darabszámának átküldése egész számként az output streamen 3. A stringek átküldése egyenként az output streamen 4. Az eredmény kiolvasása az input streamről 5. A kapcsolat lezárása 2. A stringek darabszámát tartalmazó egész szám beolvasása (N) az input streamről 3. N darab string beolvasása az input streamről 4. A leghosszabb string átküldése az output streamen 5. A kapcsolat lezárása goto 1 Szerver oldalon 1. Várakozás a következő kliensre Implementáljuk ennek megfelelően a kliens és a szerver alkalmazást! 30

Házi feladat A, Készítsen fordítási szolgáltatást végző szervert. Jellemzői: A szerver rendelkezzen néhány szavas adatbázissal az induláshoz A szerver folyamatosan működjön és egy porton várja a kliensek kapcsolódását Belépéskor a kliens választhasson az alábbi funkciók közül Új szópár felvitele: a két megadott szót vegye fel a szerver az adatbázisba Fordítás: a megadott szót keresse ki az adatbázisból és adja vissza a másik nyelven Szótár: a szerver adja vissza az általa ismert összes szót Kilépés B, Készítsen kliens-szerver alapokon off-line üzenetküldő alkalmazást. Jellemzői: A szerver alkalmazás leállítás nélkül működik és egy porton várja a klienseket Egy kliens csatlakozhat a szerverhez, megadva a felhasználó nevét és jelszavát. Első belépéskor a felhasználó bármilyen jelszót megadhat, ezt követően azonban már csak ezzel léphet be Csatlakozást követően lekérdezheti a rendszerben levő felhasználók neveit Ugyanitt küldhet üzenetet bármelyik felhasználónak (küldő, címzett, üzenet) Ha egy már ismert kliens lép be a szerverre, belépéskor jelenjenek meg az üzenetei 31

Ajánlott irodalom Az óra anyagához kapcsolódó irodalom Nyékyné Gaizler Judit: Java 2 útikalauz programozóknak 1.3 II.; ELTE TTK Hallgatói alapítvány, Budapest 158 193. o. 408 418. o. The Java Tutorials: Basic I/O http://java.sun.com/docs/books/tutorial/essential/io/index.html Java Networking Overview http://java.sun.com/j2se/1.4/pdf/networking.pdf 32