Java Socket-programmering brukes for kommunikasjon mellom applikasjonene som kjører på forskjellige JRE.
Java Socket-programmering kan være tilkoblingsorientert eller tilkoblingsfri.
Socket- og ServerSocket-klasser brukes for tilkoblingsorientert socketprogrammering og DatagramSocket- og DatagramPacket-klasser brukes for tilkoblingsløs socketprogrammering.
Klienten i socket-programmering må kunne to opplysninger:
- IP-adressen til serveren, og
- Portnummer.
Her skal vi lage enveis klient- og serverkommunikasjon. I denne applikasjonen sender klienten en melding til serveren, serveren leser meldingen og skriver den ut. Her brukes to klasser: Socket og ServerSocket. Socket-klassen brukes til å kommunisere klient og server. Gjennom denne timen kan vi lese og skrive meldinger. ServerSocket-klassen brukes på serversiden. Accept()-metoden til ServerSocket-klassen blokkerer konsollen til klienten er tilkoblet. Etter vellykket tilkobling av klienten, returnerer den forekomsten av Socket på serversiden.
Stikkontakt klasse
En stikkontakt er rett og slett et endepunkt for kommunikasjon mellom maskinene. Socket-klassen kan brukes til å lage en socket.
Viktige metoder
Metode | Beskrivelse |
---|---|
1) offentlig InputStream getInputStream() | returnerer InputStream som er koblet til denne kontakten. |
2) offentlig OutputStream getOutputStream() | returnerer OutputStream koblet til denne kontakten. |
3) offentlig synkronisert void close() | lukker denne kontakten |
ServerSocket klasse
ServerSocket-klassen kan brukes til å lage en serversocket. Dette objektet brukes til å etablere kommunikasjon med klientene.
Viktige metoder
Metode | Beskrivelse |
---|---|
1) offentlig Socket accept() | returnerer socket og etablerer en forbindelse mellom server og klient. |
2) offentlig synkronisert void close() | lukker serverkontakten. |
Eksempel på Java Socket-programmering
Oppretter server:
For å lage serverapplikasjonen må vi opprette forekomsten av ServerSocket-klassen. Her bruker vi 6666 portnummer for kommunikasjonen mellom klienten og serveren. Du kan også velge et hvilket som helst annet portnummer. Accept()-metoden venter på klienten. Hvis klienter kobler til med det gitte portnummeret, returnerer den en forekomst av Socket.
ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection and waits for the client
Oppretter klient:
For å lage klientapplikasjonen, må vi opprette forekomsten av Socket-klassen. Her må vi sende inn IP-adressen eller vertsnavnet til serveren og et portnummer. Her bruker vi 'localhost' fordi serveren vår kjører på samme system.
Socket s=new Socket('localhost',6666);
La oss se en enkel Java-socket-programmering der klienten sender en tekst og serveren mottar og skriver den ut.
Fil: 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);} } }
Fil: 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);} } }last ned dette eksemplet
For å kjøre dette programmet, åpne to ledetekster og kjør hvert program ved hver ledetekst som vist i figuren nedenfor.
Etter å ha kjørt klientapplikasjonen, vil en melding vises på serverkonsollen.
Eksempel på Java Socket-programmering (lese-skrive på begge sider)
I dette eksemplet vil klienten først skrive til serveren, deretter vil serveren motta og skrive ut teksten. Deretter vil serveren skrive til klienten og klienten vil motta og skrive ut teksten. Steget går videre.
Fil: 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(); }}
Fil: 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(); }}