Upload
marlis-bolle
View
115
Download
0
Embed Size (px)
Citation preview
Praxis der Internet-Programmierung
Http
Streams
SocketsJAVA XML
APACHE
Hypertext Transfer Protocol
WebConversation wc = new WebConversation();
WebRequest req = new GetMethodWebRequest( "http://..." );
WebResponse resp = wc.getResponse( req );
REQUEST RESPONSE
Client Server
REQUEST
GET /index.html HTTP 1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, *.*
Accept-Encoding: gzip, deflate
Content-Type: text/html
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
RESPONSEHTTP 1.1 200 OK (STATUS CODE, 404 File not found)
Server: Medusa/1.26.4.2Content-Type: text/htmlContent-Length: 136Date: Fri, 26 Oct 2001 12:47:16 GMT
<html><head><title>Test Page</title></head><body>Hallo ….</body><html>
Weiter Informationen: http://www.w3.org/Protocols/
Wichtige Header Einträge
Accept Unterstützte MIME Typen:
image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */*
Accept-Encoding Unterstützte Kodierungen:
gzip, deflate
Accept-Language Unterstützte Sprache:
De
Authorization Verschlüsselte Identifizierung:
name:passwortBasic Z3VnZ2lzYmVyZzpub3NlMg==
Connection Unterstützt anhaltende
Verbindung, der Client kann mehrere Files über eine Socketverbindung erhalten
Keep-Alive
User-Agent
Mozilla/5.0 (Windows; U; WinNT4.0; en-US; m18) Gecko/20001108 Netscape6/6.0
HTTP
Req
uest
Head
er
Repetition Java Streams
write()
Unicode Stream
Byte Stream
Einlesen eines Text Files
import java.io.*; public class IOStreamDemo { // Throw exceptions to console: public static void main(String[] args)
throws IOException { // Reading input by lines: BufferedReader in = new BufferedReader( new FileReader("tst.tex"));
String s, s2 = new String(); while((s = in.readLine())!= null) s2 += s + "\n"; in.close(); System.out.print(s2);
BufferedReader
FileReader
Anwendung
BufferedReader
InputStreamReader(System.in)
Java Anwendung
GZIPOutputStream
FileOutputStream
BufferedOutputStream
import java.io.*;import java.util.zip.*;public class streamzip { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader( new InputStreamReader(System.in));
BufferedOutputStream out = new BufferedOutputStream( new GZIPOutputStream( new FileOutputStream("test.gz"))); int c; while((c = in.read()) !=46) out.write(c); in.close(); out.close(); }}
Console Zip File
Konzept von Sockets
Puffer Puffer
INPUT STREAMOUTPUT STREAM
Abcd sd sf df sd£S$dsf£sdf$dfd$d
IP AdressePort Nummer131.152.85.122:1313
Client Server
Socket
Socket = Endpunkt einer Verbindung zwischen zwei Computern
C1
C2
Socket
TCP / UDP
IP
Ethernet
Java Socket Programmierung
// MyClient; try { Socket s_C = new Socket("Machine name", PortNumber); } catch (IOException e) { System.out.println(e); }
// MyService; try { ServerSocket s_serv = new ServerSocket(PortNumber); } catch (IOException e) { System.out.println(e); }
Link: http://www.javaworld.com/javaworld/jw-12-1996/jw-12-sockets_p.html
Client Socket
1. import java.net.*; import java.io.*;
2. Verbindung herstellen:InetAddress addr = InetAddress.getByName("localhost");Socket socket = new Socket(addr, PORT);
3. Input und Output Streams initialisieren.BufferedReader in =new BufferedReader(new
InputStreamReader(socket.getInputStream()));PrintWriter out =new PrintWriter(new BufferedWriter(new
OutputStreamWriter(socket.getOutputStream())),true);
Client Socket
4. KommunizierenString str = in.readLine();
out.println(‘meine Meldung‘);
5. Verbindung trennensocket.close();
Server Socket
1. import java.net.*; import java.io.*;
2. Verbindung ermöglichen:ServerSocket s = new ServerSocket(PORT); try { // wartet auf ein Client Socket socket = s.accept();
3. Input und Output Streams initialisieren.BufferedReader in =new BufferedReader(new
InputStreamReader(socket.getInputStream()));PrintWriter out =new PrintWriter(new BufferedWriter(new
OutputStreamWriter(socket.getOutputStream())),true);
Server Socket
4. Kommunizierenwhile (true) {
String str = in.readLine();
if (str.equals("END")) break;
System.out.println("Echoing: " + str);
out.println(str);
}
5. Verbindung trennensocket.close();
Multi Socket ServerKlassen Modellierung
multi_echoserver
PORT = 8131main()
Thread
one_echoserver
one_echoserver(socket)run()
1..20
Multi Socket Server
public static void main(String[] args)throws IOException { ServerSocket s = new ServerSocket(PORT); try { while(true) { // Wartet auf einen Client Socket socket = s.accept(); try { new one_echoserver(socket); } catch(IOException e) { socket.close();} // Bei Fehler schliessen } } finally { s.close(); }}
Multi Socket Serverclass one_echoserver extends Thread { private Socket socket; private BufferedReader in; private PrintWriter out; public one_echoserver(Socket s) throws IOException { socket = s; in = new BufferedReader( new InputStreamReader(socket.getInputStream())); out = new PrintWriter(new BufferedWriter(new
OutputStreamWriter(socket.getOutputStream())), true); start(); // run() }
Multi Socket Serverclass one_echoserver ……public void run() { try { while (true) { String str = in.readLine(); if (str.equals("END")) break; System.out.println("Echoing: " + str); out.println(str); } System.out.println("closing...");… }
Praktikum
Web Service basierend auf SocketsClient verbindet sich mit Server1. Passwortabfrage vom Server2. Server sendet die aktuelle aktuellen Börsenkurs(oder eine Wetterprognose) aus dem Internet (httpunit)4. Beide schliessen den SocketTip: mit ipconfig finden Sie ihre IP-Adresse
FürFortgeschritten Java Chat Programm für 2 oder 3 Computer
Der in der Vorlesung gezeigt Sourcecode finden Sie auf der Ifi-Homepage.
Tip & Tricks zum JBuilder
Symbol markieren & Rechte Maustaste
Information über die selektierte Klasse
Tip & Tricks zum JBuilder
Templates
Ctrl-J
Tip & Tricks zum JBuilder
Tastatur Belegung
Ctrl+Space mögliche Klassen oder MethodenCtrl+Shift+Space mögliche ParameterCtrl+Enter springt in die KlasseCtrl+Alt+Space öffnet Klassen BibliothekCtrl+J Code TemplatesCtrl + Shift + I Rechts schieben eines markierten BlocksCtrl + Shift + U Links schieben eines markierten BlocksCtrl + G goto Line