Netzwerk & Sockets

Werbung
Netzwerk & Sockets
Netzwerk
Computernetzwerke bestehen aus einzelnen Systemen, die
verschiedenartig miteinander verbunden sind
I
Netzwerkkabel (Ethernet, Token Ring, . . . )
I
Funkverbindung (WLAN, UMTS, Bluetooth, . . . )
Ziel des Netzwerksystems ist
I
Kommunikation zwischen Rechnern ungeachtet der Art
der Verbindung
I
Rechner können miteinander kommunizieren ohne direkte
Verbindung, wenn es eine Kette von Computern
dazwischen gibt, die sie verbinden
I
möglichst effiziente Verwendung der
Übertragungskapazitäten
OSI-Modell
Aufgabentrennung: Netzwerk in Schichten organisiert
Num- Name
Aufgabe
mer (deutsch/englisch)
7
Anwendungen/ Anwendung: Die bereitgestellte Aufgabe
Application
(Browser, Chat, Netzwerkspiel, . . . )
6
Darstellung/
Anwedung: Datenübersetzung, KodiePresentation
rung, Verschlüsselung, Komprimierung
5
KommuniAnwedung: Management von Verbinkationssteuer- dungen, dauerhafte Informationsübertraung/Session
gung
4
Transport/
TCP/UDP, bleibende Verbindungen
Transport
3
Vermittlung/
Netzwerkpakete, Internetadressen (IPNetwork
Adressen, IPv4/IPv6)
2
Sicherung/Data Fehlerkorrektur, Punkt-zu-Punkt Pakete
Link
1
Bitübertragung/ Vereinheitlichung verschiedener ÜberPhysical
tragungsmedien, stellt Bitstrom bereit
Sockets
Sockets sind eine einheitliche Kommunikationsmethode
I
Zwischen Programmen auf dem gleichen Rechner
I
Über das Netzwerk zwischen verschiedenen Rechnern
Verwendung von Sockets mittels Datenströme (Streams)
⇒ Einheitliche Kommunikation zwischen Programmen, die
ähnlich wie Lesen und Schreiben von Dateien handhabbar ist
Verbindungsaufbau
I
Für eine Verbindung ist die Adresse des Servers, sowie
sein Port relevant
I
I
Adresse: Klasse InetAddress hilft bei der Verwaltung.
Kann IP-Adresse (z.B. 2001:0db8:85a3:0000:0000:
”
8a2e:0370:7334“, 127.0.0.1“) oder auch ein hostname
”
(z.B. example.com“) sein
”
Port: Eine Zahl zwischen 0 und 65535, wobei der Bereich
von 49152-65535 zur freien Verwendung gedacht ist. Port
erlaubt verschiedene Server auf dem gleichen Rechner
laufen zu lassen (eine Art interne Adresse)
I
Für den Verbindungsaufbau muss der Server erklären,
dass er bereit ist, Verbindungen anzunehmen: new
ServerSocket(portNumber);
I
Der Client muss dann die Verbindung zum Server
aufnehmen: new Socket(addr, portNumber);
I
Der Server muss den Verbindungsaufbau dann annehmen:
Socket accept() in der Klasse ServerSocket
Verbindungsaufbau – Datenströme
Aus der aufgebauten Verbindung können beide Seiten lesende
und schreibende Datenströme erzeugen
I
Schreiben:
OutputStream getOutputStream() in der Klasse Socket
I
Lesen:
InputStream getInputStream() in der Klasse Socket
I
Für einen InputStream read kann man sich einen
BufferedReader br erzeugen; dieser ist bequemer und
meist effizienter
BufferedReader br = new BufferedReader(new
InputStreamReader(read, "UTF-8"));
Nertzwerkbeispiel – Client
import java.net.*;
import java.lang.*;
import java.io.*;
public class Client {
static final public int portNumber = 50127;
public static void main(String[] args)
throws IOException {
InetAddress addr = InetAddress.getByName("127.0.0.1");
Socket serverSocket = new Socket(addr, portNumber);
InputStream read = serverSocket.getInputStream();
BufferedReader br = new BufferedReader(
new InputStreamReader(read, "UTF-8"));
String content = br.readLine();
System.out.println("Server sagt: " + content);
}
}
Nertzwerkbeispiel – Server
import ...;
public class Server {
static final public int portNumber = 50127;
static String[] orte = {"Welt", "Erde", "Sonne", "Venus",
"Mars", "Mond"};
public static void main(String[] args) throws IOException {
ServerSocket serverSock = new ServerSocket(portNumber);
Socket clientSocket = serverSock.accept();
OutputStream write = clientSocket.getOutputStream();
Random rd = new Random();
String wer = orte[rd.nextInt(orte.length)];
write.write(("Hallo " + wer + ".\n").getBytes("UTF-8"));
}
}
Daten Lesen
Zum Socket gehörender Datenströme:
InputStream getInputStream(): Lesen
OutputStream getOutputStream(): Schreiben
Liegen noch keine Daten vor, so wird beim Lesen gewartet, bis
Daten vorhanden sind
I
I
⇒ Threads verwenden, sonst bleibt die Anwendung
hängen
Es gibt auch nicht-blockierende Netzwerkverbindungen:
I
I
I
Notwendige Klassen dazu im Paket java.nio
Bei jedem Lesen muss getestet werden, ob Daten kamen
Klasse Selector nützlich, um Operationen zu verwalten
JSON im Netzwerk
Durch Sockets hat man Datenströme, die denen von Dateien
ähnlich sind
⇒ Die Argumente für JSON in Dateien gelten auch für Streams
I
einfaches textbasiertes Datenaustauschformat
I
menschenlesbar
I
einheitlich, gute Bibliotheksunterstützung
Zudem: JSON im Praktikum bereits geübt
Weitere Hinweise
I
Genaue JSON-Struktur für das Netzwerk muss selbst
erarbeitet werden
I
Empfehlung: Versionsnummer mitkodieren
Zusammenfassung
I
Netzwerkverbindungenen haben gute
Bibliotheksunterstützung
I
Beim Verwenden von Streams sind die Unterschiede zu
Dateien klein
I
Großer Teil der Netzwerkkomplexität (Schicht 1-4) ist
vollständig durch Netzwerkbibliotheken abgedeckt
I
JSON deckt einiges vom Rest ab
I
Erfahrungen mit JSON können weiterverwendet werden
Herunterladen