logo

Programiranje Java Socket

Programiranje Java Socket se uporablja za komunikacijo med aplikacijami, ki se izvajajo na različnih JRE.

Programiranje Java Socket je lahko povezovalno ali brez povezav.

Razreda Socket in ServerSocket se uporabljata za programiranje vtičnic, usmerjenih v povezavo, razreda DatagramSocket in DatagramPacket pa se uporabljata za programiranje vtičnic brez povezave.

Odjemalec pri programiranju vtičnic mora poznati dve informaciji:

  1. IP naslov strežnika in
  2. Številka vrat.

Tu bomo vzpostavili enosmerno komunikacijo odjemalca in strežnika. V tej aplikaciji odjemalec pošlje sporočilo strežniku, strežnik sporočilo prebere in ga natisne. Tukaj se uporabljata dva razreda: Socket in ServerSocket. Razred Socket se uporablja za komunikacijo odjemalca in strežnika. S tem razredom lahko beremo in pišemo sporočila. Razred ServerSocket se uporablja na strani strežnika. Metoda accept() razreda ServerSocket blokira konzolo, dokler odjemalec ni povezan. Po uspešni povezavi odjemalca vrne primerek Socket na strani strežnika.

Programiranje vtičnic v Javi

Razred vtičnice

Vtičnica je preprosto končna točka za komunikacijo med stroji. Razred Socket lahko uporabite za ustvarjanje vtičnice.

Pomembne metode

MetodaOpis
1) javni InputStream getInputStream()vrne InputStream, pritrjen s to vtičnico.
2) javni OutputStream getOutputStream()vrne OutputStream, pritrjen s to vtičnico.
3) javno sinhronizirano void close()zapre to vtičnico

Razred ServerSocket

Razred ServerSocket lahko uporabite za ustvarjanje strežniške vtičnice. Ta objekt se uporablja za vzpostavitev komunikacije s strankami.

Pomembne metode

MetodaOpis
1) sprejem javne vtičnice ()vrne vtičnico in vzpostavi povezavo med strežnikom in odjemalcem.
2) javno sinhronizirano void close()zapre strežniško vtičnico.

Primer programiranja Java Socket

Ustvarjanje strežnika:

Za ustvarjanje strežniške aplikacije moramo ustvariti primerek razreda ServerSocket. Tukaj uporabljamo številko vrat 6666 za komunikacijo med odjemalcem in strežnikom. Izberete lahko tudi katero koli drugo številko vrat. Metoda accept() čaka na odjemalca. Če se odjemalci povežejo z dano številko vrat, vrnejo primerek Socket.

 ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection and waits for the client 

Ustvarjanje odjemalca:

Za ustvarjanje odjemalske aplikacije moramo ustvariti primerek razreda Socket. Tukaj moramo posredovati naslov IP ali ime gostitelja strežnika in številko vrat. Tukaj uporabljamo 'localhost', ker naš strežnik deluje na istem sistemu.

 Socket s=new Socket('localhost',6666); 

Oglejmo si preprosto programiranje vtičnic Java, kjer odjemalec pošlje besedilo, strežnik pa ga prejme in natisne.

Datoteka: 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);} } } 

Datoteka: 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);} } } 
prenesite ta primer

Za izvedbo tega programa odprite dva ukazna poziva in zaženite vsak program v vsakem ukaznem pozivu, kot je prikazano na spodnji sliki.

Po zagonu odjemalske aplikacije bo na konzoli strežnika prikazano sporočilo.

Omrežno programiranje Java

Primer programiranja Java Socket (branje-pisanje obojestransko)

V tem primeru bo odjemalec najprej pisal strežniku, nato bo strežnik prejel in natisnil besedilo. Nato bo strežnik pisal odjemalcu, odjemalec pa bo prejel in natisnil besedilo. Korak gre naprej.

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

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