logo

Java Socket Programmering

Java Socket-programmering används för kommunikation mellan applikationer som körs på olika JRE.

Java Socket-programmering kan vara anslutningsorienterad eller anslutningslös.

Socket- och ServerSocket-klasserna används för anslutningsorienterad socketprogrammering och DatagramSocket- och DatagramPacket-klasserna används för anslutningslös socketprogrammering.

Klienten i socket-programmering måste känna till två uppgifter:

  1. Serverns IP-adress och
  2. Portnummer.

Här kommer vi att göra enkelriktad klient- och serverkommunikation. I den här applikationen skickar klienten ett meddelande till servern, servern läser meddelandet och skriver ut det. Här används två klasser: Socket och ServerSocket. Klassen Socket används för att kommunicera klient och server. Genom den här klassen kan vi läsa och skriva meddelanden. ServerSocket-klassen används på serversidan. Metoden accept() för klassen ServerSocket blockerar konsolen tills klienten är ansluten. Efter framgångsrik anslutning av klienten returnerar den instansen av Socket på serversidan.

Socket-programmering i Java

Uttagsklass

Ett uttag är helt enkelt en slutpunkt för kommunikation mellan maskinerna. Klassen Socket kan användas för att skapa en socket.

Viktiga metoder

MetodBeskrivning
1) public InputStream getInputStream()returnerar InputStream som är ansluten till detta uttag.
2) public OutputStream getOutputStream()returnerar OutputStream som är ansluten till detta uttag.
3) public synchronized void close()stänger detta uttag

ServerSocket-klass

Klassen ServerSocket kan användas för att skapa en serversocket. Detta objekt används för att upprätta kommunikation med klienterna.

Viktiga metoder

MetodBeskrivning
1) public Socket accept()returnerar socket och upprättar en anslutning mellan server och klient.
2) public synchronized void close()stänger serveruttaget.

Exempel på Java Socket Programmering

Skapa server:

För att skapa serverapplikationen måste vi skapa instansen av ServerSocket-klassen. Här använder vi 6666 portnummer för kommunikationen mellan klienten och servern. Du kan också välja vilket annat portnummer som helst. Metoden accept() väntar på klienten. Om klienter ansluter med det givna portnumret, returnerar den en instans av Socket.

 ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection and waits for the client 

Skapar klient:

För att skapa klientapplikationen måste vi skapa instansen av Socket-klassen. Här måste vi skicka serverns IP-adress eller värdnamn och ett portnummer. Här använder vi 'localhost' eftersom vår server körs på samma system.

 Socket s=new Socket('localhost',6666); 

Låt oss se en enkel Java-socket-programmering där klienten skickar en text och servern tar emot och skriver ut den.

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);} } } 
ladda ner det här exemplet

För att köra detta program, öppna två kommandotolkar och kör varje program vid varje kommandotolk som visas i bilden nedan.

Efter att ha kört klientapplikationen kommer ett meddelande att visas på serverkonsolen.

Java-nätverksprogrammering

Exempel på Java Socket-programmering (läs-skriv på båda sidor)

I det här exemplet kommer klienten att skriva först till servern, sedan kommer servern att ta emot och skriva ut texten. Sedan kommer servern att skriva till klienten och klienten kommer att ta emot och skriva ut texten. Steget går vidare.

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