Praktikum TCP-Programmierung
Dieses Praktikum dient der Nutzung eines TCP-Sockets aus der Sicht eines Softwareprogammierers.
1. Telnet-Nachbau
Modifizieren Sie den TCP-Client aus der Vorlesung dahingehend, dass Sie sich mit beliebigen Hosts und Ports verbinden können. Erweitern Sie den Client dahingehend, dass Sie nach der Anzeige der Serverausgabe weitere Zeilen an den Server senden können. Beachten Sie weiterhin, dass der Server auch mehrere Zeilen hintereinander ausgegeben kann.
Nun können Sie sich mit einem beliebigen Server verbinden und verschiedene Anwendungsprotokolle (HTTP, SMTP, POP3, IMAP, etc.) testen.
Beispiel HTTP-Protokoll
Geben Sie z.B. folgendes für eine HTTP-Verbindung ein:
javaprogramm idefix.informatik.htw-dresden.de 80
GET / HTTP/1.1<CR>
Host: idefix.informatik.htw-dresden.de<CR>
<CR>
Sie sollten nun die Ausgabe des Servers sehen:
HTTP/1.1 200 OK
Server: Apache/2.2.22 (Debian)
Content-Type: text/html; charset=utf-8
[...]
Wenn Sie eine Ausgabe des Servers erhalten, bedeutet dies, dass Sie sich erfolgreich mit dem Server verbinden konnten.
Als alternative Testprogramme eignen sich telnet oder netcat
z.B.: echo -e 'GET / HTTP/1.0\n\n' | netcat -w 10 www.htw-dresden.de 80
Beispiel SMTP-Protokoll
Hier ein weiteres Beispiel für eine Verbindung unter Nutzung des SMTP-Protokolls:
javaprogramm webmail.htw-dresden.de 25
HELO test.de <CR>
Serverantwort: 220 rlux45.rz.htw-dresden.de ESMTP Postfix
QUIT <CR>
Serverantwort: 221 2.0.0 Bye
2. Dateitransfer
Schreiben Sie ein Programm zur Übertragung einer Datei mittels TCP-Socket. Sie können dazu den Client/Server aus der Vorlesung als Gerüst verwenden. Nutzen Sie zur Übertragung folgende Datei: http://www2.htw-dresden.de/~jvogt/rn/alice.txt.
Hinweise zu Java-Klassen
- BufferedReader mit Methode ready()
- FileInputStream mit Methoden read(byte[] b) und available()
- FileOutputstream mit Methode write()
- DataOutputStream mit Methode write(byte[] b, int off, int len)
- Inputstream mit Methode read() und available()
Ab JDK 9 stehen folgende Methoden der Klasse InputStream zur Verfügung:
- readAllBytes() – Liest alle Bytes aus dem Stream
- transferTo(OutputStream) – Diese Methode erlaubt das Kopieren von Daten von einem InputStream in einen OutputStream
Damit lässt sich ein Filetransfer sehr komfortabel realisieren.
Fakultativ
Letzte Änderung: 30. October 2023 11:10