logo

Java Socket-programmering

Java Socket-programmering wordt gebruikt voor communicatie tussen de applicaties die op verschillende JRE draaien.

Java Socket-programmering kan verbindingsgericht of verbindingsloos zijn.

Socket- en ServerSocket-klassen worden gebruikt voor verbindingsgerichte socketprogrammering en DatagramSocket- en DatagramPacket-klassen worden gebruikt voor verbindingsloze socketprogrammering.

De client bij socketprogrammering moet twee informatie kennen:

  1. IP-adres van de server, en
  2. Poortnummer.

Hier gaan we eenrichtingsclient- en servercommunicatie tot stand brengen. In deze toepassing stuurt de client een bericht naar de server, de server leest het bericht en drukt het af. Hier worden twee klassen gebruikt: Socket en ServerSocket. De Socket-klasse wordt gebruikt om client en server te communiceren. Via deze les kunnen we berichten lezen en schrijven. De klasse ServerSocket wordt aan de serverzijde gebruikt. De accept()-methode van de klasse ServerSocket blokkeert de console totdat de client is verbonden. Na de succesvolle verbinding van de client retourneert het de instantie van Socket aan de serverzijde.

Socketprogrammering in Java

Socket-klasse

Een socket is eenvoudigweg een eindpunt voor de communicatie tussen de machines. De klasse Socket kan worden gebruikt om een ​​socket te maken.

Belangrijke methoden

MethodeBeschrijving
1) openbare InputStream getInputStream()retourneert de InputStream die met deze socket is verbonden.
2) openbare OutputStream getOutputStream()retourneert de OutputStream die met deze socket is verbonden.
3) openbare gesynchroniseerde leegte close()sluit dit stopcontact

ServerSocket-klasse

De klasse ServerSocket kan worden gebruikt om een ​​serversocket te maken. Dit object wordt gebruikt om de communicatie met de clients tot stand te brengen.

Belangrijke methoden

MethodeBeschrijving
1) openbare socket accepteren()retourneert de socket en brengt een verbinding tot stand tussen server en client.
2) openbare gesynchroniseerde leegte close()sluit de serversocket.

Voorbeeld van Java Socket-programmering

Server aanmaken:

Om de serverapplicatie te maken, moeten we het exemplaar van de ServerSocket-klasse maken. Hier gebruiken we poortnummer 6666 voor de communicatie tussen de client en de server. U kunt ook een ander poortnummer kiezen. De accept()-methode wacht op de client. Als clients verbinding maken met het opgegeven poortnummer, retourneert het een exemplaar van Socket.

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

Klant aanmaken:

Om de clienttoepassing te maken, moeten we het exemplaar van de Socket-klasse maken. Hier moeten we het IP-adres of de hostnaam van de server en een poortnummer doorgeven. Hier gebruiken we 'localhost' omdat onze server op hetzelfde systeem draait.

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

Laten we een eenvoudige Java-socketprogrammering bekijken waarbij de client een tekst verzendt en de server deze ontvangt en afdrukt.

Bestand: MijnServer.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);} } } 

Bestand: MijnClient.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);} } } 
download dit voorbeeld

Om dit programma uit te voeren, opent u twee opdrachtprompts en voert u elk programma uit bij elke opdrachtprompt, zoals weergegeven in de onderstaande afbeelding.

Nadat de clienttoepassing is uitgevoerd, wordt er een bericht weergegeven op de serverconsole.

Java-netwerkprogrammering

Voorbeeld van Java Socket-programmering (lezen en schrijven aan beide zijden)

In dit voorbeeld schrijft de client eerst naar de server en vervolgens ontvangt de server de tekst en drukt deze af. Vervolgens schrijft de server naar de client en ontvangt de client de tekst en drukt deze af. De stap gaat door.

Bestand: MijnServer.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(); }} 

Bestand: MijnClient.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(); }}