„Java Socket“ programavimas naudojamas ryšiui tarp skirtingų JRE veikiančių programų.
Java Socket programavimas gali būti orientuotas į ryšį arba be ryšio.
Socket ir ServerSocket klasės naudojamos į ryšį orientuotam lizdų programavimui, o DatagramSocket ir DatagramPacket klasės yra naudojamos be ryšio lizdų programavimui.
Programuojant lizdą klientas turi žinoti dvi informaciją:
- Serverio IP adresas ir
- Prievado numeris.
Čia mes sukursime vienpusį kliento ir serverio ryšį. Šioje programoje klientas siunčia pranešimą serveriui, serveris nuskaito pranešimą ir jį išspausdina. Čia naudojamos dvi klasės: Socket ir ServerSocket. Socket klasė naudojama bendrauti su klientu ir serveriu. Per šią klasę galime skaityti ir rašyti žinutes. ServerSocket klasė naudojama serverio pusėje. „ServerSocket“ klasės metodas accept() blokuoja konsolę, kol klientas neprisijungs. Sėkmingai prisijungus prie kliento, jis grąžina Socket egzempliorių serverio pusėje.
Lizdų klasė
Lizdas yra tiesiog galutinis taškas ryšiams tarp mašinų. Socket klasė gali būti naudojama lizdui sukurti.
Svarbūs metodai
Metodas | apibūdinimas |
---|---|
1) viešas InputStream getInputStream() | grąžina InputStream, prijungtą prie šio lizdo. |
2) viešas OutputStream getOutputStream() | grąžina OutputStream, prijungtą prie šio lizdo. |
3) viešas sinchronizuotas void close () | uždaro šį lizdą |
ServerSocket klasė
ServerSocket klasė gali būti naudojama serverio lizdui sukurti. Šis objektas naudojamas bendravimui su klientais užmegzti.
Svarbūs metodai
Metodas | apibūdinimas |
---|---|
1) viešasis lizdas priimti() | grąžina lizdą ir užmezga ryšį tarp serverio ir kliento. |
2) viešas sinchronizuotas void close () | uždaro serverio lizdą. |
Java Socket programavimo pavyzdys
Serverio kūrimas:
Norėdami sukurti serverio programą, turime sukurti „ServerSocket“ klasės egzempliorių. Čia mes naudojame 6666 prievado numerį ryšiui tarp kliento ir serverio. Taip pat galite pasirinkti bet kurį kitą prievado numerį. Accept() metodas laukia kliento. Jei klientai prisijungia naudodami nurodytą prievado numerį, jis grąžina Socket egzempliorių.
ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection and waits for the client
Kliento kūrimas:
Norėdami sukurti kliento programą, turime sukurti Socket klasės egzempliorių. Čia turime perduoti serverio IP adresą arba pagrindinio kompiuterio pavadinimą ir prievado numerį. Čia mes naudojame „localhost“, nes mūsų serveris veikia toje pačioje sistemoje.
Socket s=new Socket('localhost',6666);
Pažiūrėkime, kaip paprastas Java socket programavimas, kai klientas siunčia tekstą, o serveris jį priima ir spausdina.
Failas: 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);} } }
Failas: 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);} } }atsisiųskite šį pavyzdį
Norėdami vykdyti šią programą, atidarykite dvi komandų eilutes ir paleiskite kiekvieną programą kiekvienoje komandų eilutėje, kaip parodyta toliau pateiktame paveikslėlyje.
Paleidus kliento programą, serverio konsolėje bus rodomas pranešimas.
Java Socket programavimo pavyzdys (skaitymas ir rašymas abiejose pusėse)
Šiame pavyzdyje klientas pirmiausia rašys į serverį, tada serveris gaus ir išspausdins tekstą. Tada serveris parašys klientui, o klientas gaus ir išspausdins tekstą. Žingsnis tęsiasi.
Failas: 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(); }}
Failas: 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(); }}