logo

Java-Socket-Programmierung

Die Java-Socket-Programmierung wird für die Kommunikation zwischen den Anwendungen verwendet, die auf verschiedenen JRE ausgeführt werden.

Die Java-Socket-Programmierung kann verbindungsorientiert oder verbindungslos sein.

Die Klassen Socket und ServerSocket werden für die verbindungsorientierte Socket-Programmierung und die Klassen DatagramSocket und DatagramPacket für die verbindungslose Socket-Programmierung verwendet.

Der Client bei der Socket-Programmierung muss zwei Informationen kennen:

  1. IP-Adresse des Servers und
  2. Port-Nummer.

Hier werden wir eine einseitige Client- und Serverkommunikation durchführen. In dieser Anwendung sendet der Client eine Nachricht an den Server, der Server liest die Nachricht und druckt sie aus. Hier werden zwei Klassen verwendet: Socket und ServerSocket. Die Socket-Klasse wird zur Kommunikation zwischen Client und Server verwendet. Durch diesen Kurs können wir Nachrichten lesen und schreiben. Die ServerSocket-Klasse wird serverseitig verwendet. Die Methode „accept()“ der Klasse „ServerSocket“ blockiert die Konsole, bis der Client verbunden ist. Nach der erfolgreichen Verbindung des Clients wird die Socket-Instanz auf der Serverseite zurückgegeben.

Socket-Programmierung in Java

Socket-Klasse

Ein Socket ist einfach ein Endpunkt für die Kommunikation zwischen den Maschinen. Mit der Socket-Klasse kann ein Socket erstellt werden.

Wichtige Methoden

MethodeBeschreibung
1) öffentlicher InputStream getInputStream()gibt den mit diesem Socket verbundenen InputStream zurück.
2) öffentlicher OutputStream getOutputStream()gibt den OutputStream zurück, der mit diesem Socket verbunden ist.
3) öffentliches synchronisiertes void close()schließt diesen Socket

ServerSocket-Klasse

Mit der ServerSocket-Klasse kann ein Server-Socket erstellt werden. Dieses Objekt wird verwendet, um die Kommunikation mit den Clients herzustellen.

Wichtige Methoden

MethodeBeschreibung
1) öffentlicher Socket Accept()Gibt den Socket zurück und stellt eine Verbindung zwischen Server und Client her.
2) öffentliches synchronisiertes void close()Schließt den Server-Socket.

Beispiel für Java-Socket-Programmierung

Server erstellen:

Um die Serveranwendung zu erstellen, müssen wir die Instanz der ServerSocket-Klasse erstellen. Hier verwenden wir die Portnummer 6666 für die Kommunikation zwischen Client und Server. Sie können auch eine beliebige andere Portnummer wählen. Die Methode „accept()“ wartet auf den Client. Wenn Clients eine Verbindung mit der angegebenen Portnummer herstellen, wird eine Instanz von Socket zurückgegeben.

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

Client erstellen:

Um die Clientanwendung zu erstellen, müssen wir die Instanz der Socket-Klasse erstellen. Hier müssen wir die IP-Adresse oder den Hostnamen des Servers und eine Portnummer übergeben. Hier verwenden wir „localhost“, da unser Server auf demselben System läuft.

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

Sehen wir uns eine einfache Java-Socket-Programmierung an, bei der der Client einen Text sendet und der Server ihn empfängt und ausgibt.

Datei: 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);} } } 

Datei: 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);} } } 
Laden Sie dieses Beispiel herunter

Um dieses Programm auszuführen, öffnen Sie zwei Eingabeaufforderungen und führen Sie jedes Programm an jeder Eingabeaufforderung aus, wie in der folgenden Abbildung dargestellt.

Nach dem Ausführen der Clientanwendung wird eine Meldung auf der Serverkonsole angezeigt.

Java-Netzwerkprogrammierung

Beispiel für Java-Socket-Programmierung (beidseitig Lesen/Schreiben)

In diesem Beispiel schreibt der Client zuerst an den Server, dann empfängt und druckt der Server den Text. Dann schreibt der Server an den Client und der Client empfängt und druckt den Text. Der Schritt geht weiter.

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

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