- LAN / WAN
- IP-Adressen
- Ports
- Server
- Proxy
- Netzwerke in Java
- URL-Objekte
- Daten von URL lesen
- Sockets
Abhängig von den zu überbrückenden Entfernungen teilt man Netzwerke in zwei Gruppen ein:
-
LAN (local area network): Hiermit wird ein Netz bezeichnet, dessen Reichweite auf wenige Gebäude eines abgeschlossenen Geländes (Betrieb, Fach- oder Hochschule, Verwaltung, Schule, ...) beschränkt ist.
-
WAN (wide area network): Dieses Netz verbindet Teilnehmer über Hunderte von Kilometern, beispielsweise auch via Satellit (Internet).
-
Jeder Rechner ist im Internet durch eine Adresse identifiziert. Man nennt diese IP-Adresse.
-
IP Adressen sind nicht leicht zu merken. Daher stehen stellvertretend für Adressen einfache Namen.
-
Ein spezieller Dienst wandelt den Namen in eine IP-Adresse um.
-
Dieser Dienst ist der Namensdienst und wird von einem DNS-Server übernommen.
Welche IP-Adressen kennt ihr?
IP | Host |
---|---|
1.1.1.1 | Cloudflare DNS |
8.8.8.8 | Google DNS |
194.94.24.5 | hochschule-bremen.de |
192.109.135.50 | hs-bremerhaven.de |
85.13.155.63 | die-partei.de |
185.230.162.140 | fachinformatiker.app |
-
Für jeden Dienst (Service), den ein Server zur Verfügung stellt, gibt es einen Port.
-
Alltagsbeispiel: Es reicht nicht aus, die Adresse der Verwaltung in der Stadt zu kennen. Ich brauche auch noch eine Zimmernummer.
-
IP-Adressen und Ports werden nicht willkürlich, sondern von der IANA (Internet Assigned Numbers Authority) vergeben.
-
Die Portnummer ist eine 16 Bit Zahl, eingeteilt in:
- System 0-1023 (›Well-Known‹, Contact) und
- Benutzer 1024-65535.
-
Komplette Liste ist einsehbar unter: https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
Was für Ports kennt ihr?
Port | Dienst |
---|---|
9 | Wake-on-LAN |
21 | FTP |
22 | SSH |
23 | Telnet |
25 | SMTP |
69 | TFTP |
80 | HTTP |
88 | Kerberos |
Port | Dienst |
---|---|
110 | POP3 |
123 | NTP |
143 | IMAP |
161 | SNMP |
443 | HTTPS |
666 | Doom |
666 | aircrack-ng server |
Was für Server (Dienste) kennt ihr?
Server | Nutzen |
---|---|
Web-Server | Server, der HTML-Dokumente und andere Internet-Ressourcen speichert und versendet bzw. entgegennimmt |
FTP-Server | Liefert Dateien, Programme, Daten oder nimmt sie an, allerdings nicht so komfortabel wie bei www. |
Mail-Server | Speichert ankommende E-Mail und liefert sie aus |
Proxy-Server | Speichert Kopien aufgerufener Webseiten. Beim wiederholtem Aufruf wird dem Benutzer eine Kopie zugesandt. Damit kann Netzkapazität gespart werden. |
File-Server | Stellt seinen Clients Dateien und Speicherplatz bereit und übernimmt die Sicherung der Benutzerdateien. |
Der Internetverkehr größerer Firmen geht in der Regel durch einen Proxy.
Ein Proxy-Server lässt sich ich Java durch spezielle Property-Variablen zuweisen:
System.setProperty( "proxySet", "true" );
System.setProperty( "proxyHost", "proxy.murdr.eu" );
System.setProperty( "proxyPort", "81" );
-
Das Entwurfsziel von Java war: Einfache Verbindung zwischen Rechnern und SetBox-Systemen.
-
Das Standardpaket java.net hilft bei allen Netzwerkverbindungen.
-
Mit Datenströmen wird das Lesen/Schreiben so leicht wie der Zugriff auf das Dateisystem.
-
Verbindung zu Servern und Abrufen von Daten mit gewöhnlichen Web-Protokollen und Sockets.
-
Den Umgang mit IP-Adressen übernimmt eine Java-Klasse java.net.InetAddress
-
Die Klasse InetAddress hat keine öffentlichen Konstrukturen, nur einige statische Methoden
-
InetAddress.getLocalHost() liefert die IP-Adresse des lokalen Rechners, oft (127.0.0.1)
-
InetAddress.getByName(String host) liefert die IP-Addresse eines gegebenen Hosts.
-
Der Parameter host ist entweder der Maschinenname (»fachinformatiker.app«) oder eine String-Repräsentation der IP-Adresse (»185.230.162.140«).
-
Kann die IP-Adresse nicht gefunden werden, so lösen die Methoden eine UnknownHostException aus.
Die Objektmethoden stellen Anfragen an das InetAddress-Objekt:
-
byte[] getAddress() Liefert die IP-Adresse als Bytefeld.
-
String getHostAddress() Liefert einen String in der Form A.B.C.D
-
String getHostName() Liefert den Hostnamen für die Adresse.
URL-Objekte repräsentieren Hostnamen, Port und Dateiname.
Die Konstruktoren lösen eine MalformedURLException aus, wenn:
- der Parameter im Konstruktor null ist oder
- das URL-Objekt ein unbekanntes Protokoll beschreibt.
String s = "https://www.hs-bremen.de/internet/de/hsb/struktur/mitarbeiter/hmosemann/";
URL url = new URL(s);
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
-
URL-Verbindungen sind schon High-Level Verbindungen.
-
Die Rechner, die im Internet verbunden sind, kommunizieren über Protokolle (bsp. TCP/IP).
-
Ein Socket dient zur Abstraktion und ist ein Verbindungspunkt in einem TCP/IP Netzwerk.
-
Wer Daten empfängt (Client) öffnet eine Socket-Verbindung zum Horchen
-
Derjenige der sendet, öffnet eine Verbindung zum Senden (Server)
-
Mit einem Socket baut man eine feste Verbindung zu einem Rechner auf, die für die Dauer der Übertragung bestehen bleibt.
-
Was für den Server Ausgabe-/Eingabestrom ist, ist für den Client Eingabe-/Ausgabstrom.
-
Auf der Client-Seite bauen wir zuerst ein Socket-Objekt auf.
-
Der Server soll auf Port 80 kontaktiert werden.
Socket clientSock;
clientSock = new Socket( "die.weite.welt", 80 );
- Die Klasse Socket bietet die Methoden getInputStream() und getOutputStream(), die einen Zugang zum Datenstrom erlauben.
- Um die Performanz zu heben, können wir einen gepufferten OutputSteam nutzen:
InputStream is = server.getInputStream();
BufferedReader in;
in = new BufferedReader( new InputStreamReader(is) );
Socket s = new Socket( "www.die-partei.de", 80 );
out.println( s.getKeepAlive() ); // false
out.println( s.getLocalAddress() ); // /195.37.111.215
out.println( s.getLocalPort() ); // 56339
out.println( s.getLocalSocketAddress() ); // /195.37.111.215:56339
out.println( s.getOOBInline() ); // false
out.println( s.getPort() ); // 80
out.println( s.getRemoteSocketAddress() ); // www.die-partei.de/85.13.155.63:80
out.println( s.getReuseAddress() ); // false
out.println( s.getReceiveBufferSize() ); // 65536
out.println( s.getSendBufferSize() ); // 65536
out.println( s.getSoLinger() ); // –1
out.println( s.getTcpNoDelay() ); // false
out.println( s.getTrafficClass() ); // 0
-
Ein Server-Socket erzeugen der horcht
-
Mit der accept()-Methode auf neue Verbindungen warten
-
Ein- und Ausgabestrom vom zurückgegebenen Socket erzeugen
-
Mit einem definierten Protokoll die Konversation unterhalten
-
Stream vom Client und Socket schließen
-
Bei Schritt 2 weitermachen oder Server-Socket schließen
ServerSocket ss = new ServerSocket(1337);
Socket s = ss.accept();
DataInputStream din = new DataInputStream(s.getInputStream());
DataOutputStream dout = new DataOutputStream(s.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = "";
String str2 = "";
while(!str.equals("stop")){
str = din.readUTF();
System.out.println("client says: "+str);
str2 = br.readLine();
dout.writeUTF(str2);
dout.flush();
}
din.close();
s.close();
ss.close();
}
Socket s = new Socket("localhost",1337);
DataInputStream din = new DataInputStream(s.getInputStream());
DataOutputStream dout = new DataOutputStream(s.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = "";
String str2 = "";
while(!str.equals("stop")){
str = br.readLine();
dout.writeUTF(str);
dout.flush();
str2 = din.readUTF();
System.out.println("Server says: "+str2);
}
dout.close();
s.close();
Java ist auch eine Insel (Christian Ullenboom) http://openbook.rheinwerk-verlag.de/javainsel/
C von A bis Z (Jürgen Wolf) http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/025_c_netzwerkprogrammierung_001.htm
Netzwerk-Programmierung http://www.netzmafia.de/skripten/inetprog/index.html
Die Folien und alle Codebeispiele findet ihr unter: