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:
- IP adresa poslužitelja i
- 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.
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
metoda | Opis |
---|---|
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
metoda | Opis |
---|---|
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.
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(); }}