Java Socket programmēšana tiek izmantota saziņai starp lietojumprogrammām, kas darbojas dažādās JRE.
Java Socket programmēšana var būt orientēta uz savienojumu vai bez savienojuma.
Socket un ServerSocket klases tiek izmantotas uz savienojumu orientētai ligzdu programmēšanai, savukārt DatagramSocket un DatagramPacket klases tiek izmantotas ligzdu programmēšanai bez savienojuma.
Klientam ligzdas programmēšanas laikā ir jāzina divas ziņas:
- Servera IP adrese un
- Porta numurs.
Šeit mēs izveidosim vienvirziena klientu un servera saziņu. Šajā lietojumprogrammā klients nosūta ziņojumu serverim, serveris nolasa ziņojumu un izdrukā to. Šeit tiek izmantotas divas klases: Socket un ServerSocket. Socket klase tiek izmantota, lai sazinātos ar klientu un serveri. Šajā klasē mēs varam lasīt un rakstīt ziņojumus. ServerSocket klase tiek izmantota servera pusē. ServerSocket klases metode accept() bloķē konsoli, līdz tiek izveidots savienojums ar klientu. Pēc veiksmīgas klienta savienojuma izveides tas atgriež Socket gadījumu servera pusē.
Kontaktligzdu klase
Kontaktligzda ir vienkārši galapunkts saziņai starp iekārtām. Socket klasi var izmantot, lai izveidotu kontaktligzdu.
Svarīgas metodes
Metode | Apraksts |
---|---|
1) publiska InputStream getInputStream() | atgriež ar šo ligzdu pievienoto InputStream. |
2) publiska OutputStream getOutputStream() | atgriež ar šo ligzdu pievienoto OutputStream. |
3) publisks sinhronizēts void close () | aizver šo kontaktligzdu |
ServerSocket klase
ServerSocket klasi var izmantot, lai izveidotu servera ligzdu. Šis objekts tiek izmantots, lai izveidotu saziņu ar klientiem.
Svarīgas metodes
Metode | Apraksts |
---|---|
1) publiskā ligzdas pieņemšana () | atgriež ligzdu un izveido savienojumu starp serveri un klientu. |
2) publisks sinhronizēts void close () | aizver servera ligzdu. |
Java Socket programmēšanas piemērs
Servera izveide:
Lai izveidotu servera lietojumprogrammu, mums ir jāizveido ServerSocket klases gadījums. Šeit mēs izmantojam 6666 porta numuru saziņai starp klientu un serveri. Varat arī izvēlēties jebkuru citu porta numuru. Pieņemšanas() metode gaida klientu. Ja klienti izveido savienojumu ar norādīto porta numuru, tas atgriež Socket gadījumu.
ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection and waits for the client
Klienta izveide:
Lai izveidotu klienta lietojumprogrammu, mums ir jāizveido Socket klases gadījums. Šeit mums ir jānodod servera IP adrese vai resursdatora nosaukums un porta numurs. Šeit mēs izmantojam “localhost”, jo mūsu serveris darbojas tajā pašā sistēmā.
Socket s=new Socket('localhost',6666);
Apskatīsim vienkāršu Java ligzdas programmēšanu, kurā klients nosūta tekstu, bet serveris to saņem un izdrukā.
Fails: 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);} } }
Fails: 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);} } }lejupielādējiet šo piemēru
Lai izpildītu šo programmu, atveriet divas komandu uzvednes un izpildiet katru programmu katrā komandu uzvednē, kā parādīts zemāk esošajā attēlā.
Pēc klienta lietojumprogrammas palaišanas servera konsolē tiks parādīts ziņojums.
Java Socket programmēšanas piemērs (lasīt-rakstīt abas puses)
Šajā piemērā klients vispirms rakstīs uz serveri, pēc tam serveris saņems un izdrukās tekstu. Pēc tam serveris rakstīs klientam un klients saņems un izdrukās tekstu. Solis turpinās.
Fails: 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(); }}
Fails: 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(); }}