Programarea Java Socket este utilizată pentru comunicarea între aplicațiile care rulează pe diferite JRE.
Programarea Java Socket poate fi orientată spre conexiune sau fără conexiune.
Clasele Socket și ServerSocket sunt folosite pentru programarea socket-ului orientată spre conexiune, iar clasele DatagramSocket și DatagramPacket sunt folosite pentru programarea socket-ului fără conexiune.
Clientul în programarea socketului trebuie să cunoască două informații:
- Adresa IP a serverului și
- Numarul portului.
Aici, vom realiza o comunicare unidirecțională între client și server. În această aplicație, clientul trimite un mesaj către server, serverul citește mesajul și îl imprimă. Aici se folosesc două clase: Socket și ServerSocket. Clasa Socket este folosită pentru a comunica client și server. Prin această clasă, putem citi și scrie mesaj. Clasa ServerSocket este utilizată pe partea serverului. Metoda accept() a clasei ServerSocket blochează consola până când clientul este conectat. După conectarea cu succes a clientului, returnează instanța Socket la partea serverului.
Clasa prize
O priză este pur și simplu un punct final pentru comunicațiile între mașini. Clasa Socket poate fi folosită pentru a crea un socket.
Metode importante
Metodă | Descriere |
---|---|
1) public InputStream getInputStream() | returnează InputStream-ul atașat cu acest socket. |
2) public OutputStream getOutputStream() | returnează OutputStream atașat cu acest socket. |
3) public sincronizat void close() | închide această priză |
Clasa ServerSocket
Clasa ServerSocket poate fi folosită pentru a crea un socket de server. Acest obiect este folosit pentru a stabili comunicarea cu clienții.
Metode importante
Metodă | Descriere |
---|---|
1) Socket public accept() | returnează socket-ul și stabilește o conexiune între server și client. |
2) public sincronizat void close() | închide soclul serverului. |
Exemplu de programare Java Socket
Crearea serverului:
Pentru a crea aplicația server, trebuie să creăm instanța clasei ServerSocket. Aici, folosim numărul portului 6666 pentru comunicarea dintre client și server. De asemenea, puteți alege orice alt număr de port. Metoda accept() așteaptă clientul. Dacă clienții se conectează cu numărul de port dat, returnează o instanță Socket.
ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection and waits for the client
Crearea clientului:
Pentru a crea aplicația client, trebuie să creăm instanța clasei Socket. Aici, trebuie să transmitem adresa IP sau numele de gazdă al serverului și un număr de port. Aici, folosim „localhost” deoarece serverul nostru rulează pe același sistem.
Socket s=new Socket('localhost',6666);
Să vedem o programare simplă de socket Java în care clientul trimite un text și serverul îl primește și îl imprimă.
Fișier: 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);} } }
Fișier: 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);} } }descărcați acest exemplu
Pentru a executa acest program, deschideți două prompturi de comandă și executați fiecare program la fiecare prompt de comandă, așa cum este afișat în figura de mai jos.
După rularea aplicației client, pe consola serverului va fi afișat un mesaj.
Exemplu de programare Java Socket (Citire-Scriere ambele părți)
În acest exemplu, clientul va scrie mai întâi pe server, apoi serverul va primi și imprima textul. Apoi serverul va scrie clientului, iar clientul va primi și imprima textul. Pasul merge mai departe.
Fișier: 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(); }}
Fișier: 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(); }}