logo

Java Socket -ohjelmointi

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:

  1. Palvelimen IP-osoite ja
  2. 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.

Socket-ohjelmointi Javassa

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.

Java verkkoohjelmointi

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(); }}