Tutorstunde 10
Server Server hat: Typ: Webserver etc… IP: Adresse: 192.168.0.12 oder 127.0.0.1 oder localhost (loopback) Port(s): In unserem Fall 8000 Ein Server stellt einen Dienst bereit den Clients verwenden können Der Port kann die Art des Servers definieren
Umgang mit einem Server ServerSocket ClientSocket
ServerSocket Zum Verbindungsaufbau An dieses Socket wird der Port gebunden: ServerSocket serverSocket = new ServerSocket(8000); // 8000 ist der Port an den wir das Socket binden Nimmt Clients an über: Socket clientSocket = serverSocket.accept(); //blockiert!
ClientSocket Muss Port und IP-Adresse wissen zum Connecten Kann auch nur über Sockets kommunizieren Socket socket = new Socket(“IP-als-String zb 127.0.0.1“, PORT);
Wie kann man sich Sockets vorstellen? Sockets sind Schnittstellen zwischen Server und Client. Jedes Socket hat einen Server und einen Client das nur für die Kommunikation zwischen diesen zuständig ist
WICHTIG Sockets müssen IMMER geschlossen werden egal was passiert: Stromausfall etc… ServerSocket s = new….. try { … } catch (Exception …) { //Bitte sinnvolle Exceptions handeln } finally { try { s.close(); } catch(Exception) {;} // Hier sollte nur Exception stehen und keine //Behandlung Warum? }
Socket IN OUT Flush erklären Server Client OUT IN
Download von einem Server PORT: 80 Anfrage an einen HTTP Webserver: Client muss Request schicken Server schickt Response Zeile Typ der Anfrage (GET) Pfad der Anfrage (Ohne Host) Protokoll (HTTP/1.0) Zeile Host Bsp für die Aufgabe: String request = “GET /….Pfad.csv HTTP/1.1“; String host = “Host: www2.in.tum.de“; Zeilen mit “\n\r“ trennen! Und nach print flushen
Wie komme ich an die Daten? HTTP-Request Stream zum Server der vorher aufgebaut wurde (Achtung, Header ist auch noch dabei) Unsere CSV-Datei
Comparable und Iterator Zwei sehr wichtige Interfaces die man häufig sieht und braucht Comparable macht zwei Objekte vergleichbar – compareTo muss implementiert werden Iterator macht Mengen von Objekten iterierbar mittels der for (Object o : Menge) -> Foreach-Schleife
Funktionen als Methodenparameter übergeben Manche sagen das ginge in Java nicht: Eigentlich geht’s auch nicht. Verwendung des Interface Function<TypVonInput, TypVonOutput> Man muss apply(TypVonInput) überschreiben und das Ergebnis der Funktion zurückgeben (hat den Typ TypVonOutput)
Beispiel Funktion die Strings auf ihre Länge mapt: class FunctionStringToLengthMap implements Function<String, Integer> { @Override public Integer apply(String input) { return input.length; }
Predicate Selbes Prinzip wie bei Function nur dieses Mal eine Condition die erfüllt werden muss: @Override public boolean test(TypVonPedicate var { return irgendwas; } Dr. rer. nat. Erika Mustermann (TUM) | kann beliebig erweitert werden | Infos mit Strich trennen