Java Socket -ohjelmointia käytetään eri JRE:llä toimivien sovellusten väliseen viestintään.
Java Socket -ohjelmointi voi olla yhteyssuuntautunutta tai yhteydetöntä.
Socket- ja ServerSocket-luokkia käytetään yhteyskeskeiseen socket-ohjelmointiin ja DatagramSocket- ja DatagramPacket-luokkiin yhteydettömään socket-ohjelmointiin.
Socket-ohjelmoinnin asiakkaan tulee tietää kaksi tietoa:
- Palvelimen IP-osoite ja
- Porttinumero.
Tässä aiomme tehdä yksisuuntaista asiakas- ja palvelinviestintää. Tässä sovelluksessa asiakas lähettää viestin palvelimelle, palvelin lukee viestin ja tulostaa sen. Tässä käytetään kahta luokkaa: Socket ja ServerSocket. Socket-luokkaa käytetään kommunikoimaan asiakkaan ja palvelimen välillä. Tämän luokan kautta voimme lukea ja kirjoittaa viestejä. ServerSocket-luokkaa käytetään palvelinpuolella. ServerSocket-luokan accept()-menetelmä estää konsolin, kunnes asiakas on yhdistetty. Asiakkaan onnistuneen yhteyden jälkeen se palauttaa Socketin esiintymän palvelinpuolella.
Pistorasialuokka
Socket on yksinkertaisesti päätepiste koneiden väliselle tiedonsiirrolle. Socket-luokkaa voidaan käyttää socketin luomiseen.
Tärkeitä menetelmiä
Menetelmä | Kuvaus |
---|---|
1) julkinen InputStream getInputStream() | palauttaa tähän liitäntään liitetyn InputStreamin. |
2) julkinen OutputStream getOutputStream() | palauttaa tähän liitäntään liitetyn OutputStreamin. |
3) julkinen synkronoitu void close() | sulkee tämän pistorasian |
ServerSocket-luokka
ServerSocket-luokkaa voidaan käyttää palvelinsocketin luomiseen. Tätä objektia käytetään yhteydenpitoon asiakkaiden kanssa.
Tärkeitä menetelmiä
Menetelmä | Kuvaus |
---|---|
1) public Socket hyväksy() | palauttaa socketin ja muodostaa yhteyden palvelimen ja asiakkaan välille. |
2) julkinen synkronoitu void close() | sulkee palvelinpistorasian. |
Esimerkki Java Socket -ohjelmoinnista
Luodaan palvelinta:
Palvelinsovelluksen luomiseksi meidän on luotava ServerSocket-luokan esiintymä. Tässä käytämme 6666-porttinumeroa viestintään asiakkaan ja palvelimen välillä. Voit myös valita minkä tahansa muun portin numeron. Accept()-menetelmä odottaa asiakasta. Jos asiakkaat muodostavat yhteyden annettuun porttinumeroon, se palauttaa Socketin esiintymän.
ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection and waits for the client
Asiakkaan luominen:
Asiakassovelluksen luomiseksi meidän on luotava Socket-luokan esiintymä. Täällä meidän on välitettävä palvelimen IP-osoite tai isäntänimi ja portin numero. Tässä käytämme 'localhostia', koska palvelimemme toimii samassa järjestelmässä.
Socket s=new Socket('localhost',6666);
Katsotaanpa yksinkertaista Java socket -ohjelmointia, jossa asiakas lähettää tekstin ja palvelin vastaanottaa ja tulostaa sen.
Tiedosto: 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);} } }
Tiedosto: 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);} } }lataa tämä esimerkki
Tämän ohjelman suorittamiseksi avaa kaksi komentokehotetta ja suorita jokainen ohjelma jokaisessa komentokehotteessa alla olevan kuvan mukaisesti.
Kun asiakassovellus on suoritettu, palvelinkonsolissa näkyy viesti.
Esimerkki Java Socket -ohjelmoinnista (luku-kirjoitus molemmilla puolilla)
Tässä esimerkissä asiakas kirjoittaa ensin palvelimelle ja sitten palvelin vastaanottaa ja tulostaa tekstin. Sitten palvelin kirjoittaa asiakkaalle ja asiakas vastaanottaa ja tulostaa tekstin. Askel jatkuu.
Tiedosto: 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(); }}
Tiedosto: 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(); }}