logo

Programiranje Java utičnica

Java Socket programiranje koristi se za komunikaciju između aplikacija koje rade na različitim JRE.

Java Socket programiranje može biti orijentirano na povezivanje ili bez njega.

Klase Socket i ServerSocket koriste se za programiranje soketa orijentirano na vezu, a klase DatagramSocket i DatagramPacket koriste se za programiranje soketa bez veze.

Klijent u programiranju utičnica mora znati dvije informacije:

  1. IP adresa poslužitelja i
  2. Broj porta.

Ovdje ćemo napraviti jednosmjernu komunikaciju između klijenta i poslužitelja. U ovoj aplikaciji klijent šalje poruku poslužitelju, poslužitelj čita poruku i ispisuje je. Ovdje se koriste dvije klase: Socket i ServerSocket. Klasa Socket koristi se za komunikaciju klijenta i poslužitelja. Kroz ovaj razred možemo čitati i pisati poruke. Klasa ServerSocket koristi se na strani poslužitelja. Metoda accept() klase ServerSocket blokira konzolu dok se klijent ne poveže. Nakon uspješnog spajanja klijenta, vraća instancu Socket na strani poslužitelja.

Programiranje utičnica u Javi

Klasa utičnice

Utičnica je jednostavno krajnja točka za komunikaciju između strojeva. Klasa Socket može se koristiti za kreiranje soketa.

Važne metode

metodaOpis
1) javni InputStream getInputStream()vraća InputStream pripojen ovom utičnicom.
2) javni OutputStream getOutputStream()vraća OutputStream pripojen ovom utičnicom.
3) javni sinkronizirani void close()zatvara ovu utičnicu

ServerSocket klasa

Klasa ServerSocket može se koristiti za stvaranje utičnice poslužitelja. Ovaj objekt služi za uspostavljanje komunikacije s klijentima.

Važne metode

metodaOpis
1) public Socket accept()vraća socket i uspostavlja vezu između poslužitelja i klijenta.
2) javni sinkronizirani void close()zatvara utičnicu poslužitelja.

Primjer Java Socket programiranja

Izrada poslužitelja:

Da bismo kreirali poslužiteljsku aplikaciju, moramo kreirati instancu klase ServerSocket. Ovdje koristimo broj porta 6666 za komunikaciju između klijenta i poslužitelja. Također možete odabrati bilo koji drugi broj priključka. Metoda accept() čeka klijenta. Ako se klijenti povežu s danim brojem porta, vraćaju instancu utičnice.

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

Stvaranje klijenta:

Da bismo kreirali klijentsku aplikaciju, moramo kreirati instancu klase Socket. Ovdje moramo proslijediti IP adresu ili naziv hosta poslužitelja i broj porta. Ovdje koristimo 'localhost' jer naš poslužitelj radi na istom sustavu.

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

Pogledajmo jednostavno programiranje Java utičnica gdje klijent šalje tekst, a poslužitelj ga prima i ispisuje.

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);} } } 
preuzmite ovaj primjer

Da biste izvršili ovaj program, otvorite dva naredbena retka i pokrenite svaki program na svakom naredbenom retku kao što je prikazano na donjoj slici.

Nakon pokretanja klijentske aplikacije, poruka će se prikazati na konzoli poslužitelja.

Java mrežno programiranje

Primjer Java Socket programiranja (čitanje-pisanje s obje strane)

U ovom primjeru, klijent će prvo pisati poslužitelju, a zatim će poslužitelj primiti i ispisati tekst. Tada će poslužitelj pisati klijentu, a klijent će primiti i ispisati tekst. Korak ide dalje.

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