logo

Java Socket programozás

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:

  1. A szerver IP-címe és
  2. 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.

Socket programozás Java nyelven

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ódszerLeí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ódszerLeí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.

Java hálózati programozás

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(); }}