uio--WebPageMain-Module
JAVA-C3 Network-Programming Network Basics Grundlagen TCP UDP Datagram IP-Adressen Port listen DNS Domain-Name DNS A- und AAAA-Records CNAME-Record Reverse-DNS / PTR-Record TTL Windows: DNS und Host Windows: Firewalls und Ports HTTPS.SYS Nginx als Reverse-Proxy Binding Lokale Netzwerke und NET URI scheme host port path/file Query Fragment / Anchor (01) Hierarchischer URI (02) Opaque URI (03) URI mit Sonderzeichen (04) Normalisierung von URI (04) Normalisierung von URI Prüfen auf Gleichheit a.compare(b) a.equals(b) (05) Relative in absolute URIs übersetzen URL Encoding/Decoding URL-Encoding ASCII Unicode Codepage UTF-8 UTF-16 UTF-32 ISO-8859-1 UTF-32 URLDecoder StandardChartsets.UTF_8

Blocking-I/O Non-Blocking-I/O

network-java-sockets @! network-java-nio FEHLT

Client-Server mit Sockets Unabhängige Java-Programme in Kommunikation über Sockets Client Server @! com.stuelken.java.c1.networking.basics.sockets Version prüfen! @! com.stuelken.java.***.a7.e50200_clientserver_keyvalue.client KeyValueClientResilient class @! Das müssten 3 verschiedene Beispiele/Pages sein! @! Erfordert com.stuelken..ArgumentInterpreter! @! Sprungmarken für Client, Server, .. ergänzen

Overview

JAVA-C3 | Overview

Im Bereich JAVA-C3 befassen wir uns mit Datenbanken.

Im Bereich JAVA-C3 befassen wir uns zu Beginn mit den Grundlagen der Netzwerk-Kommunikation in JAVA mit DNS, Domain, IP, URI, URL, MIME Types, Charset, UFT-8 Codepoints, Konvertierung von Strings zu UTF-8/16. Im weiteren Verlauf zeigen wir, wie man Verbindung über Sockets oder auch HTTP Services realisiert.

Abbildung: Java Tiers C

Network Programming

java-c3 | Network Programming

Netzwerk-Programmierung oder Network-Programming ist ein Teilbereich in der Entwicklung von Java Anwendungen, in welchem es um das verwenden von Netzwerkverbindungen und damit das akzeptieren von Anfragen oder auch das Senden von Anfragen geht.

Netzwerk-Programmierung bedeutet zuerst einmal, dass die Kommunikation beispiel technisch betrachtet über ServerSocket, Socket, WebSocket, Input- und OutPut-Streams mit Blocking- oder Non-Blocking-I/O überhaupt funktioniert, bevor man sich erst in einem anderen Themenblock mit Client-Server-Architekturen befasst.

Network Basics

java-c3 | Network Basics

Bevor man in die Programmierung von Anwendungen stürzt, welche Netzwerk-Verbindungen verwenden, ist es mehr als ratsam, wenn man die wichtigsten Begriffe und Prinzipien wie mitunter TCP, UDP, localhost, Domains, DNS und dergleichen verstanden hat.

Dieser Themenblock umfasst eine kurze Wiederholung zum Thema Netzwerk-Kommunikation und Begriffen, die für die Programmierung von Bedeutung sind.

Network URI

java-c3 | Network URI

In diesem Themenblock gehen wir auf die Bedeutung von URI für Webadressen, Files, den Sonderfall von data-URIs, das entsprechende Arbeiten mit java.net.uri, eine Reihe von Begriffen wie Scheme, Fragment, Query, Authority sowie die Konvertierung von relativen in absolute URIs ein.

Mit praktischen Code-Beispielen zeigen wir neben des Parsens von Strings in URIs auch einen Ansatz, wie mitunter Text- und andere Daten-Files als Teil eines Java-Programms im Package über Data-URIs gespeichert werden können.

Network URL-Encoding

java-c3 | Network URL-Encoding

Für die Adressierung von Files im Internet oder auch das Übersenden von Formularwerten werden Zeichenfolgen in eine URL-konforme Schreibweise übersetzt oder aus dieser Schreibweise zurück in einen String des jeweiligen Charsets zurückübersetzt.

In diesem Themenblock zeigen wir, wie man das umsetzt und worauf man in Hinblick auf Zeichensätze wie UTF-8, UTF-16 und UTF-32 zu achten hat.

Client-Server

java-c3 | Client-Server mit Sockets

Client-Server-Anwendung mit Sockets sind eine vergleichsweise rudimentäre Variante mit deren Hilfe man in Java aus Microservices bestehende Anwendungen programmieren kann. Das Primärziel besteht darin, dass sich mehrere Clients über eine Netzwerkverbindung mit einem Server verbinden und darauf warten können, falls der Server aktuell nicht online ist.

Wir zeigen in diesem Beispiel, wie man einen resilienten Client programmiert, welche bestimmte Aktionen auf dem Server durchführen kann, um auf dem Server Daten zu erzeugen, abzufragen, zu verändern, die zu löschen oder auch eine Liste aller Daten anzuzeigen.

Streams und Pipelines

java-c3 | Streams und Pipelines in Java

Dieser Themenblock wird derzeit redaktionelle überarbeitet.

https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/stream/package-summary.html

Asynchrone Programmierung

java-c3 | Asynchrone Programmierung in JAVA

Asynchrone Programmierung wird noch in den Themenbereich Parallel Computing verschoben wegen nebenläufiger Programmierung.

AsyncExample.java



package com.stuelken.java.c1.concurrency.e03;

import java.util.concurrent.CompletableFuture;

/**
 * Dieses Beispiel zeigt, wie man ähnlich wie in JavaScript statt mit
 * async/await im Falle von Java mit CompletableFuture aus der
 * java.util.concurrent Bibliothek eine asynchrone Funktionalität auch in Java
 * erreichen kann.
 * 
 * <ul>
 * <li>Funktionale Verarbeitung des Ergebnisses</li>
 * <li>Funktionale Ausgabe des Ergebnisses</li>
 * </ul>
 * 
 * @author t2m
 *
 */
public class AsyncExample {
	
	/**
	 * 
	 * @param args Keine Argumente für das Hauptprogramm
	 */
	public static void main(String[] args) {
		
		System.out.println("(1) Programm startet.");
				
		CompletableFuture.supplyAsync(() -> {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println("(2) Komplexe Berechnung beginnt.");
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println("(3) Komplete Berechnung endet.");
			
			return "Ergebnis der Berechnung: 42";
		}).thenApply(result -> {
			System.out.println("(4) Verarbeitung Ergebnis.");
			// 
			return result.toUpperCase();
		}).thenAccept(finalResult -> {
			System.out.println("(5) Ausgabe des Ergebnisses.");
			System.out.println("Async Ergebnis: " + finalResult);
		});

		// Warten, damit der asynchrone Code abgeschlossen werden kann (nur für
		// Demo-Zwecke)
		try {
			System.out.println("(6) Programm durchgelaufen und wartet 5.000ms.");			
			Thread.sleep(5000);
			System.out.println("(7) Programm ist fertig.");			
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

/*
(1) Programm startet.
(6) Programm durchgelaufen und wartet 5.000ms.
(2) Komplexe Berechnung beginnt.
(3) Komplete Berechnung endet.
(4) Verarbeitung Ergebnis.
(5) Ausgabe des Ergebnisses.
Async Ergebnis: ERGEBNIS DER BERECHNUNG: 42
(7) Programm ist fertig.
 * 
 */



 
(1) Programm startet.
(6) Programm durchgelaufen und wartet 5.000ms.
(2) Komplexe Berechnung beginnt.
(3) Komplete Berechnung endet.
(4) Verarbeitung Ergebnis.
(5) Ausgabe des Ergebnisses.
Async Ergebnis: ERGEBNIS DER BERECHNUNG: 42
(7) Programm ist fertig.

Erläuterung

Supplier

JAVA Essential Classes

java-c3 | Essential Classes

Einige Klassen und Packages in JAVA gelten für Entwickler essentiell und dahingehend als quasi unverzichtbar. Der Umfang der Funktionalität dieser Packages ist allerdings dermaßen groß und erfordert zudem auch so solide JAVA Kenntnisse, dass entsprechende Themenbereiche quasi einer Vertiefung entsprechen.

Exceptions: https://docs.oracle.com/javase/tutorial/essential/exceptions/index.html

Basic I/O: https://docs.oracle.com/javase/tutorial/essential/io/index.html

Concurrency: https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html

JAVA Plattform: https://docs.oracle.com/javase/tutorial/essential/environment/index.html

Regular Expressions: https://docs.oracle.com/javase/tutorial/essential/regex/index.html

Links

FootNotes


    Client-Server-Anwendung, Network-Programming, Netzwerk-Programmierung, /java/term/Socket, java.net.uri

    UI ORGANIZED.

    UIO3 Es ist einfacher als Du denkst.

    Stelle noch heute Deine Anfrage.

    uio--WebPageFooter-Module