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.
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.
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
UIO3 Es ist einfacher als Du denkst.
Stelle noch heute Deine Anfrage.

