Java Socket Programmeren – Voorbeeld van Socket Server en Client

Welkom bij het Java Socket-programmeer voorbeeld. Elke server is een programma dat op een specifiek systeem draait en luistert op een specifieke poort. Sockets zijn gebonden aan de poortnummers en wanneer we een server draaien, luistert deze gewoon op de socket en wacht op clientverzoeken. Bijvoorbeeld, de Tomcat-server die draait op poort 8080 wacht op clientverzoeken en zodra het een clientverzoek ontvangt, reageert het daarop.

Java Socket Programmeren

Een socket is een van de twee uiteinden van een tweerichtingscommunicatiekoppeling tussen twee programma’s die op het netwerk draaien. De socket is gebonden aan een poortnummer zodat de TCP-laag de toepassing kan identificeren waarnaar de gegevens moeten worden verzonden. In het voorbeeld van het Java-socketprogrammeren zullen we leren hoe we een Java-socketserver en Java-socketclient-programma kunnen schrijven. We zullen ook leren hoe het server-clientprogramma gegevens leest en schrijft op de socket. java.net.Socket en java.net.ServerSocket zijn de Java-klassen die Socket en Socket-server implementeren.

Voorbeeld van Java Socket Server

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-variabele
    private static ServerSocket server;
    //poort van de socketserver waarnaar het luistert
    private static int port = 9876;
    
    public static void main(String args[]) throws IOException, ClassNotFoundException{
        //maak het object van de socketserver aan
        server = new ServerSocket(port);
        //blijf luisteren totdat je een 'exit'-oproep ontvangt of het programma wordt beëindigd
        while(true){
            System.out.println("Waiting for the client request");
            //creëer de socket en wacht op de verbinding van de client
            Socket socket = server.accept();
            //lees van de socket naar het ObjectInputStream-object
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            //zet het ObjectInputStream-object om naar een String
            String message = (String) ois.readObject();
            System.out.println("Message Received: " + message);
            //maak het ObjectOutputStream-object aan
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            //schrijf het object naar de socket
            oos.writeObject("Hi Client "+message);
            //sluit bronnen af
            ois.close();
            oos.close();
            socket.close();
            //beëindig de server als de client een exitverzoek verzendt
            if(message.equalsIgnoreCase("exit")) break;
        }
        System.out.println("Shutting down Socket server!!");
        //sluit het ServerSocket-object af
        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{
        //krijg het IP-adres van de localhost, als de server op een ander IP draait, moet je dat gebruiken
        InetAddress host = InetAddress.getLocalHost();
        Socket socket = null;
        ObjectOutputStream oos = null;
        ObjectInputStream ois = null;
        for(int i=0; i<5;i++){
            //maak een socketverbinding met de server
            socket = new Socket(host.getHostName(), 9876);
            //schrijf naar de socket met ObjectOutputStream
            oos = new ObjectOutputStream(socket.getOutputStream());
            System.out.println("Sending request to Socket Server");
            if(i==4)oos.writeObject("exit");
            else oos.writeObject(""+i);
            //lees het bericht met de serverrespons
            ois = new ObjectInputStream(socket.getInputStream());
            String message = (String) ois.readObject();
            System.out.println("Message: " + message);
            //sluit bronnen af
            ois.close();
            oos.close();
            Thread.sleep(100);
        }
    }
}

Om Java-socketprogrammering voor server-clientcommunicatie te testen, moeten we eerst de klasse SocketServerExample uitvoeren. Wanneer je de socketserver uitvoert, zal deze alleen “Wachten op clientverzoek” afdrukken en vervolgens wachten op het clientverzoek. Nu, wanneer je de klasse SocketClientExample uitvoert, zal deze een verzoek naar de Java-socketserver sturen en het antwoordbericht naar de console afdrukken. Hier is de uitvoer van het Java-socketserverprogramma SocketServerExample.

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 is de uitvoer van het Java-socketclientprogramma SocketClientExample.

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

Dat is alles voor een snelle samenvatting van socketprogrammering in Java. Ik hoop dat je aan de slag kunt met Java-socketserver- en Java-socketclientprogrammering. Referentie: Oracle Doc

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