Kapitel 6: Ausgewählte Kapitel der Java

Werbung
Universität Paderborn
Prof. Dr. Stefan Böttcher
Kapitel 6:
Ausgewählte Kapitel der
Java-Programmierung
(Teil 2: Internetprogrammierung)
Grundlagen der Programmierung 2, SS 2008
1
Universität Paderborn
Prof. Dr. Stefan Böttcher
Internet-Grundlagen: Adressierung
Client
Server
IP-Nummer
131.234.30.62
Dienst
: PORT
Name
pc-boettshk1.upb.de
daytime
13
telnet
23
http
80
...
...
Grundlagen der Programmierung 2, SS 2008
2
Universität Paderborn
Prof. Dr. Stefan Böttcher
Internet-Grundlagen: HTTP
Client
Server
Verbindung öffnen:
Verbinde zu www.upb.de:80/cs/boettcher
Anforderung senden:
GET /willkommen.html HTTP/1.0
Antwort schicken:
HTTP/1.0 200 OK
Server: Apache Web Server
Content-Type: text/html
Content-Length: 34
Willkommen in unserem Internetshop
Verbindung schließen
Grundlagen der Programmierung 2, SS 2008
3
Universität Paderborn
Prof. Dr. Stefan Böttcher
Internet-Grundlagen: Server und Services
Port
13:
23:
80:
...
8080:
8723:
Zeit
Telnet
WWW
WWW alternativ
„eigener Service“
Mehrere Services auf einem Rechner
=> jeder auf einem eigenen Port
Grundlagen der Programmierung 2, SS 2008
4
Universität Paderborn
Prof. Dr. Stefan Böttcher
2. Internet-Programmierung in Java
• Internetzugriff über Strings und Streams
• Sockets
• HTTP-Client
• HTTP-Spiegelserver
Grundlagen der Programmierung 2, SS 2008
5
Universität Paderborn
Prof. Dr. Stefan Böttcher
Internetzugriff über Streams und Strings
InputStreams (=Datenströme mit Eingabedaten) :
• Tastatur
• lokale Dateien
• Internetseiten
Lesen geht für alle Eingabe-Ströme gleich:
BufferedReader strom =
new BufferedReader ( ein Eingabestrom ) ;
String s = strom.readLine( ) ; // 1. Zeile lesen
Grundlagen der Programmierung 2, SS 2008
6
Universität Paderborn
Prof. Dr. Stefan Böttcher
Strings lesen aus Strömen
Lesen von der Tastatur
BufferedReader ein = new BufferedReader(
new InputStreamReader(System.in) ) ;
String s = ein.readLine() ;
while (s != null)
{
// hier Zeile verarbeiten
s = ein.readLine(); // nächste Zeile holen
}
Lesen aus lokalen Dateien:
BufferedReader dateiEin = new BufferedReader(
new FileInputStream(“Kunde.java“) ) ;
String s = dateiEin.readLine() ; // ...
Grundlagen der Programmierung 2, SS 2008
7
Strings lesen aus Strömen (2)
Universität Paderborn
Prof. Dr. Stefan Böttcher
Lesen aus dem Internet (über URL)
URL url = new URL(
"http://www.upb.de/cs/boettcher/willkommen.htm");
BufferedReader einURL = new BufferedReader(
new InputStreamReader(url.openStream()) );
String s = einURL.readLine() ; // ...
Ausnahmen abfangen (bei allen Leseoperationen)
try {
// ...
Leseoperationen
}
catch(Exception e) { System.out.println(e); } // Ausnahmen abfangen
Grundlagen der Programmierung 2, SS 2008
8
Sockets
Universität Paderborn
Prof. Dr. Stefan Böttcher
Andere Rechner sind genauso zugreifbar wie lokale Dateien
in Java über Eingabe- bzw. Ausgabe-Ströme
String host = “paris.uni-paderborn.de";
Socket socket = new Socket(host, 13);
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
String zeit = in.readLine();
System.out.println(“Die Zeit auf Rechner " + host + " ist " + zeit);
Grundlagen der Programmierung 2, SS 2008
9
Ein HTTP-Client
import java.io.*;
Universität Paderborn
Prof. Dr. Stefan Böttcher
import java.net.*;
public class HttpClient {
public static void main( String[ ] args ) {
try { Socket socket = new Socket("192.168.1.101", 8080 );
BufferedReader from_server = new BufferedReader(
new InputStreamReader( socket.getInputStream() ) ) ;
PrintWriter to_server =
new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
// Sende HTTP GET Kommando zum Web server und welche Seite
to_server.println("GET /start.html"); to_server.println(); to_server.flush();
// sende sofort
String zeile = from_server.readLine() ;
while ( zeile != null ) { System.out.println( zeile ) ;
zeile = from_server.readLine() ; }
socket.close(); // Wenn alles gelesen ist, schließe Socket
} catch (Exception e) { System.out.println(e); }
}
}
Grundlagen der Programmierung 2, SS 2008
10
Einfacher HTTP-Spiegelserver
Universität Paderborn
Prof. Dr. Stefan Böttcher
import java.io.*;
import java.net.*;
public class HttpSpiegel {
public static void main(String args[]) {
try { ServerSocket ss = new ServerSocket(8080); // Service einrichten
for(;;) { Socket client = ss.accept( ); // warte bis ein Client sich anmeldet
BufferedReader in = new BufferedReader(
new InputStreamReader( client.getInputStream( ) ) );
PrintWriter out = new PrintWriter(
new OutputStreamWriter( client.getOutputStream( ) ) );
out.println("HTTP/1.0 200 "); out.println("Content-Type: text/plain");
out.println( ); out.flush( );
String zeile = in.readLine( ) ;
while( zeile != null && zeile.length( ) != 0 )
{ out.println( zeile ); zeile = in.readLine() ;
}
}
out.close( ); in.close( ); client.close( );
} // for: Warte auf nächsten Client
catch (Exception e) { System.out.println(e); }
}
Grundlagen
der Programmierung 2, SS 2008
}
11
Herunterladen