Programovanie Java Socket sa používa na komunikáciu medzi aplikáciami bežiacimi na rôznych JRE.
Programovanie Java Socket môže byť orientované na pripojenie alebo bez pripojenia.
Triedy Socket a ServerSocket sa používajú na programovanie soketov orientovaných na pripojenie a triedy DatagramSocket a DatagramPacket sa používajú na programovanie soketov bez pripojenia.
Klient pri programovaní soketov musí poznať dve informácie:
- IP adresa servera a
- Číslo portu.
Tu urobíme jednosmernú komunikáciu medzi klientom a serverom. V tejto aplikácii klient odošle správu na server, server správu prečíta a vytlačí. Tu sa používajú dve triedy: Socket a ServerSocket. Trieda Socket sa používa na komunikáciu medzi klientom a serverom. Prostredníctvom tejto triedy môžeme čítať a písať správy. Trieda ServerSocket sa používa na strane servera. Metóda accept() triedy ServerSocket blokuje konzolu, kým sa nepripojí klient. Po úspešnom pripojení klienta vráti inštanciu Socketu na strane servera.
Trieda zásuvky
Soket je jednoducho koncový bod pre komunikáciu medzi strojmi. Triedu Socket možno použiť na vytvorenie zásuvky.
Dôležité metódy
Metóda | Popis |
---|---|
1) verejný vstupný prúd getInputStream() | vráti InputStream pripojený k tomuto soketu. |
2) verejný výstupný prúd getOutputStream() | vráti OutputStream pripojený k tomuto soketu. |
3) verejné synchronizované void close() | zatvorí túto zásuvku |
Trieda ServerSocket
Triedu ServerSocket možno použiť na vytvorenie serverového soketu. Tento objekt slúži na nadviazanie komunikácie s klientmi.
Dôležité metódy
Metóda | Popis |
---|---|
1) akceptovať verejnú zásuvku () | vráti soket a vytvorí spojenie medzi serverom a klientom. |
2) verejné synchronizované void close() | zatvorí soket servera. |
Príklad programovania Java Socket
Vytvára sa server:
Na vytvorenie serverovej aplikácie potrebujeme vytvoriť inštanciu triedy ServerSocket. Tu používame číslo portu 6666 na komunikáciu medzi klientom a serverom. Môžete si tiež vybrať akékoľvek iné číslo portu. Metóda accept() čaká na klienta. Ak sa klienti pripájajú s daným číslom portu, vráti inštanciu Socket.
ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection and waits for the client
Vytváranie klienta:
Na vytvorenie klientskej aplikácie potrebujeme vytvoriť inštanciu triedy Socket. Tu musíme odovzdať IP adresu alebo názov hostiteľa servera a číslo portu. Tu používame „localhost“, pretože náš server beží na rovnakom systéme.
Socket s=new Socket('localhost',6666);
Pozrime sa na jednoduché programovanie Java soketov, kde klient odošle text a server ho prijme a vytlačí.
Súbor: 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);} } }
Súbor: 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);} } }stiahnite si tento príklad
Ak chcete spustiť tento program, otvorte dva príkazové riadky a spustite každý program v každom príkazovom riadku, ako je znázornené na obrázku nižšie.
Po spustení klientskej aplikácie sa na konzole servera zobrazí správa.
Príklad programovania Java Socket (obojstranné čítanie a zápis)
V tomto príklade klient najprv zapíše na server, potom server prijme a vytlačí text. Potom server napíše klientovi a klient prijme a vytlačí text. Krok pokračuje.
Súbor: 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(); }}
Súbor: 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(); }}