Java Socket Programmierung – Socket Server, Client Beispiel

Willkommen zum Beispiel für Java Socket-Programmierung. Jeder Server ist ein Programm, das auf einem bestimmten System läuft und auf einem bestimmten Port hört. Sockets sind an die Portnummern gebunden, und wenn wir einen Server starten, hört er einfach auf dem Socket und wartet auf Client-Anfragen. Zum Beispiel wartet der Tomcat-Server, der auf Port 8080 läuft, auf Client-Anfragen und antwortet, sobald er eine Client-Anfrage erhält.

Java Socket-Programmierung

Ein Socket ist ein Endpunkt einer bidirektionalen Kommunikationsverbindung zwischen zwei Programmen im Netzwerk. Das Socket ist an eine Portnummer gebunden, damit die TCP-Schicht die Anwendung identifizieren kann, für die die Daten bestimmt sind. Im Beispiel für die Java-Socket-Programmierung werden wir lernen, wie man Java-Socket-Server und Java-Socket-Client schreibt. Wir werden auch lernen, wie das Server-Client-Programm Daten auf dem Socket liest und schreibt. java.net.Socket und java.net.ServerSocket sind die Java-Klassen, die Socket und Socket-Server implementieren.

Java Socket-Server-Beispiel

package com.journaldev.socket;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.ClassNotFoundException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * This class implements java Socket server
 * @author pankaj
 *
 */
public class SocketServerExample {
    
    //statische ServerSocket-Variablen
    private static ServerSocket server;
    //Socket-Server-Port, auf dem er lauschen wird
    private static int port = 9876;
    
    public static void main(String args[]) throws IOException, ClassNotFoundException{
        //Erstellen Sie das Socket-Server-Objekt
        server = new ServerSocket(port);
        //Hört unbegrenzt zu, bis ein 'exit'-Aufruf empfangen wird oder das Programm beendet wird
        while(true){
            System.out.println("Waiting for the client request");
            //Socket erstellen und auf Client-Verbindung warten
            Socket socket = server.accept();
            //Von Socket zu ObjectInputStream-Objekt lesen
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            //ObjectInputStream-Objekt in String umwandeln
            String message = (String) ois.readObject();
            System.out.println("Message Received: " + message);
            //ObjectOutputStream-Objekt erstellen
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            //Objekt in Socket schreiben
            oos.writeObject("Hi Client "+message);
            //Ressourcen schließen
            ois.close();
            oos.close();
            socket.close();
            //Server beenden, wenn der Client eine Exit-Anforderung sendet
            if(message.equalsIgnoreCase("exit")) break;
        }
        System.out.println("Shutting down Socket server!!");
        //ServerSocket-Objekt schließen
        server.close();
    }
    
}

Java Socket Client

package com.journaldev.socket;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * This class implements java socket client
 * @author pankaj
 *
 */
public class SocketClientExample {

    public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException, InterruptedException{
        //Holen Sie sich die IP-Adresse des lokalen Hosts. Wenn der Server auf einer anderen IP läuft, müssen Sie diese verwenden
        InetAddress host = InetAddress.getLocalHost();
        Socket socket = null;
        ObjectOutputStream oos = null;
        ObjectInputStream ois = null;
        for(int i=0; i<5;i++){
            //Socket-Verbindung zum Server herstellen
            socket = new Socket(host.getHostName(), 9876);
            //Schreiben Sie mit ObjectOutputStream in den Socket
            oos = new ObjectOutputStream(socket.getOutputStream());
            System.out.println("Sending request to Socket Server");
            if(i==4)oos.writeObject("exit");
            else oos.writeObject(""+i);
            //Lesen Sie die Antwortnachricht des Servers
            ois = new ObjectInputStream(socket.getInputStream());
            String message = (String) ois.readObject();
            System.out.println("Message: " + message);
            //Ressourcen schließen
            ois.close();
            oos.close();
            Thread.sleep(100);
        }
    }
}

Um die Java-Socket-Programmierung der Server-Client-Kommunikation zu testen, müssen wir zunächst die Klasse SocketServerExample ausführen. Wenn Sie den Socket-Server starten, wird er lediglich „Warten auf Client-Anfrage“ ausgeben und dann auf die Anfrage des Clients warten. Wenn Sie nun die Klasse SocketClientExample ausführen, wird sie eine Anfrage an den Java-Socket-Server senden und die Antwortnachricht in der Konsole ausgeben. Hier ist die Ausgabe des Java-Socket-Servers SocketServerExample-Programms.

Waiting for the client request
Message Received: 0
Waiting for the client request
Message Received: 1
Waiting for the client request
Message Received: 2
Waiting for the client request
Message Received: 3
Waiting for the client request
Message Received: exit
Shutting down Socket server!!

Hier ist die Ausgabe des Java-Socket-Clients SocketClientExample-Programms.

Sending request to Socket Server
Message: Hi Client 0
Sending request to Socket Server
Message: Hi Client 1
Sending request to Socket Server
Message: Hi Client 2
Sending request to Socket Server
Message: Hi Client 3
Sending request to Socket Server
Message: Hi Client exit

Das ist alles für eine kurze Übersicht über die Socket-Programmierung in Java. Ich hoffe, Sie können mit der Java-Socket-Server- und Java-Socket-Client-Programmierung beginnen. Referenz: Oracle Doc

Source:
https://www.digitalocean.com/community/tutorials/java-socket-programming-server-client