Fortgeschrittenes Java Tag 6: Netzwerk & Sockets

Ziel dieses Tages

Heute lernst du:

Am Ende wirst du einfache Client-Server-Anwendungen in Java schreiben können.

Schritt 1: TCP-Client

Verbinde dich mit einem Server über Socket und sende Daten.


import java.io.*;
import java.net.*;

Socket socket = new Socket("localhost", 5000);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

out.println("Hallo Server!");
socket.close();

Schritt 2: TCP-Server

Verwende ServerSocket, um auf Verbindungen zu warten.


import java.io.*;
import java.net.*;

ServerSocket server = new ServerSocket(5000);
System.out.println("Server gestartet, warte auf Client...");

Socket client = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));

String message = in.readLine();
System.out.println("Empfangen: " + message);

client.close();
server.close();

Schritt 3: Senden und Empfangen von Daten

Du kannst PrintWriter und BufferedReader verwenden, um Nachrichten zu senden und zu empfangen.


PrintWriter out = new PrintWriter(client.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));

out.println("Hallo!");
String response = in.readLine();
System.out.println("Server sagt: " + response);

Übung


import java.io.*;
import java.net.*;

Socket socket = new Socket("localhost", 5000);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("Hallo Server!");
socket.close();

Aufgabe

Erstelle ein einfaches Client-Server-Programm, bei dem der Server Nachrichten zurückschickt (Echo).

Schritte:

Beispiel:


import java.io.*;
import java.net.*;

// Server
public class EchoServer {
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(5000);
        System.out.println("Server gestartet...");

        Socket client = server.accept();
        BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
        PrintWriter out = new PrintWriter(client.getOutputStream(), true);

        String message;
        while((message = in.readLine()) != null) {
            System.out.println("Empfangen: " + message);
            out.println("Echo: " + message);
        }

        client.close();
        server.close();
    }
}

// Client
public class EchoClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 5000);
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        out.println("Hallo Server!");
        System.out.println(in.readLine());

        socket.close();
    }
}