A Java Socket programozást a különböző JRE-n futó alkalmazások közötti kommunikációra használják.
A Java Socket programozás lehet kapcsolatorientált vagy kapcsolat nélküli.
A Socket és a ServerSocket osztályokat a kapcsolatorientált socket programozáshoz, a DatagramSocket és DatagramPacket osztályokat pedig a kapcsolat nélküli socket programozáshoz használják.
A socket programozó kliensnek két információt kell tudnia:
- A szerver IP-címe és
- Port száma.
Itt egyirányú kliens és szerver kommunikációt fogunk megvalósítani. Ebben az alkalmazásban a kliens üzenetet küld a szervernek, a szerver elolvassa az üzenetet és kinyomtatja. Itt két osztályt használunk: Socket és ServerSocket. A Socket osztály a kliens és a szerver kommunikációjára szolgál. Ezen az órán keresztül tudunk üzeneteket olvasni és írni. A ServerSocket osztályt a szerver oldalon használják. A ServerSocket osztály accept() metódusa blokkolja a konzolt, amíg az ügyfél nem csatlakozik. A kliens sikeres csatlakoztatása után visszaadja a Socket példányát a szerver oldalon.
Aljzat osztály
A socket egyszerűen egy végpont a gépek közötti kommunikációhoz. A Socket osztály használható socket létrehozására.
Fontos módszerek
Módszer | Leírás |
---|---|
1) nyilvános InputStream getInputStream() | visszaadja az ehhez a sockethez csatlakoztatott InputStream-et. |
2) nyilvános OutputStream getOutputStream() | visszaadja az ehhez a sockethez csatlakoztatott OutputStream-et. |
3) nyilvános szinkronizált void close() | bezárja ezt az aljzatot |
ServerSocket osztály
A ServerSocket osztály használható szerver socket létrehozására. Ez az objektum az ügyfelekkel való kommunikáció létrehozására szolgál.
Fontos módszerek
Módszer | Leírás |
---|---|
1) nyilvános socket elfogadja() | visszaadja a socketet, és kapcsolatot létesít a szerver és a kliens között. |
2) nyilvános szinkronizált void close() | bezárja a szerver socketet. |
Példa a Java Socket programozásra
Szerver létrehozása:
A szerveralkalmazás létrehozásához létre kell hoznunk a ServerSocket osztály példányát. Itt 6666-os portszámot használunk a kliens és a szerver közötti kommunikációhoz. Választhat bármilyen más portszámot is. Az accept() metódus vár a kliensre. Ha az ügyfelek a megadott portszámmal csatlakoznak, akkor a Socket példányát adja vissza.
ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection and waits for the client
Ügyfél létrehozása:
Az ügyfélalkalmazás létrehozásához létre kell hoznunk a Socket osztály példányát. Itt meg kell adnunk a szerver IP-címét vagy gazdagépnevét és egy portszámot. Itt a 'localhost'-ot használjuk, mert a szerverünk ugyanazon a rendszeren fut.
Socket s=new Socket('localhost',6666);
Lássunk egy egyszerű Java socket programozást, ahol a kliens szöveget küld, a szerver pedig fogadja és kinyomtatja.
Fájl: MyServer.java
import java.io.*; import java.net.*; public class MyServer { public static void main(String[] args){ try{ ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection DataInputStream dis=new DataInputStream(s.getInputStream()); String str=(String)dis.readUTF(); System.out.println('message= '+str); ss.close(); }catch(Exception e){System.out.println(e);} } }
Fájl: MyClient.java
import java.io.*; import java.net.*; public class MyClient { public static void main(String[] args) { try{ Socket s=new Socket('localhost',6666); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); dout.writeUTF('Hello Server'); dout.flush(); dout.close(); s.close(); }catch(Exception e){System.out.println(e);} } }töltse le ezt a példát
A program végrehajtásához nyisson meg két parancssort, és futtassa le mindegyik programot mindegyik parancssorban, ahogy az alábbi ábrán látható.
Az ügyfélalkalmazás futtatása után egy üzenet jelenik meg a kiszolgálókonzolon.
Példa Java Socket programozásra (mindkét oldalon írás-olvasás)
Ebben a példában a kliens először a szerverre ír, majd a szerver fogadja és kinyomtatja a szöveget. Ezután a szerver ír a kliensnek, és az ügyfél megkapja és kinyomtatja a szöveget. A lépés folytatódik.
Fájl: MyServer.java
import java.net.*; import java.io.*; class MyServer{ public static void main(String args[])throws Exception{ ServerSocket ss=new ServerSocket(3333); Socket s=ss.accept(); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str='',str2=''; while(!str.equals('stop')){ str=din.readUTF(); System.out.println('client says: '+str); str2=br.readLine(); dout.writeUTF(str2); dout.flush(); } din.close(); s.close(); ss.close(); }}
Fájl: MyClient.java
import java.net.*; import java.io.*; class MyClient{ public static void main(String args[])throws Exception{ Socket s=new Socket('localhost',3333); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str='',str2=''; while(!str.equals('stop')){ str=br.readLine(); dout.writeUTF(str); dout.flush(); str2=din.readUTF(); System.out.println('Server says: '+str2); } dout.close(); s.close(); }}