Ausgewählte Implementierungsprobleme



Ähnliche Dokumente
Transmission Control Protocol (TCP)

Anbindung des eibport an das Internet

Remote Method Invocation

Java RMI Remote Method Invocation

FOPT 5: Eigenständige Client-Server-Anwendungen (Programmierung verteilter Anwendungen in Java 1)

Client-Server mit Socket und API von Berkeley

Java-Programmierung. Remote Method Invocation - RMI

Informatik B. Vorlesung 16 Netzwerkprogrammierung. Dr. Ralf Kunze

Der lokale und verteilte Fall

ecaros2 - Accountmanager

Online-Publishing mit HTML und CSS für Einsteigerinnen

Programmieren I. Kapitel 15. Ein und Ausgabe

Enigmail Konfiguration

Gefahren aus dem Internet 1 Grundwissen April 2010

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Einführung in die Programmierung

15 Transportschicht (Schicht 4)

ARCHITEKTUR VON INFORMATIONSSYSTEMEN

SMS-Dienst SMS-Dienst procar informatik AG Stand: FS 04/2011 Eschenweg Weiterstadt 1

Networking. Motivation Grundlagen von Sockets Klasse Socket Klasse ServerSocket Exceptions Klasse URL

Motivation. Inhalt. URI-Schemata (1) URI-Schemata (2)

2.3 Applikationen. Protokolle: TCP/IP. Telnet, FTP, Rlogin. Carsten Köhn

Konfigurationsanleitung Access Control Lists (ACL) Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.0.

Einführung in die Netzwerktechnik

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

Programmieren II. Timer. Vorlesung 11. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester Timer. Sockets.

Referat: Netzwerkprogrammierung in Java

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Rechnernetzwerke. Rechnernetze sind Verbünde von einzelnen Computern, die Daten auf elektronischem Weg miteinander austauschen können.

4. Network Interfaces Welches verwenden? 5. Anwendung : Laden einer einfachen Internetseite 6. Kapselung von Paketen

Übungen zu Softwaretechnik

VS Praktikum 03 Konzept

Mail-Signierung und Verschlüsselung

Zwischenablage (Bilder, Texte,...)

Ihr Benutzerhandbuch SAMSUNG SGH-V200

Das Handbuch zu Simond. Peter H. Grasch

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein: - Ein Bootimage ab Version Optional einen DHCP Server.

Verteilte Systeme - Java Networking (Sockets) -

Leichte-Sprache-Bilder

Web Grundlagen zum Spidering

HBF IT-Systeme. BBU-NPA Übung 4 Stand:

DELFI. Benutzeranleitung Dateiversand für unsere Kunden. Grontmij GmbH. Postfach Bremen. Friedrich-Mißler-Straße Bremen

Scharl 2010 Dokument ist Urheberrechtlich geschützt. Port Forwarding via PuTTY und SSH. Was ist Port forwarding?

Als erstes besuchen wir nun also dyndns.org, das auf dyndns.com umleitet. Dort klicken wir nun oben rechts auf den Reiter: DNS & Domains.

Medea3 Print-Client (m3_print)

DNÜ-Tutorium HS Niederrhein, WS 2014/2015. Probeklausur

1. Netzwerkprogrammierung für mobile Geräte

Objektorientierte Programmierung

Virtual Private Network

Benutzung der LS-Miniscanner

mit ssh auf Router connecten

Copyright MB Connect Line GmbH 2014

GEZIELT MEHR SICHERHEIT MIT 4I ACCESS SERVER & 4I CONNECT CLIENT

Man unterscheidet zwischen LAN (Local Area Network) und WAN (Wide Area Network), auch Internet genannt.

FuxMedia Programm im Netzwerk einrichten am Beispiel von Windows 7

Externe Abfrage von für Benutzer der HSA über Mozilla-Thunderbird

Kennen, können, beherrschen lernen was gebraucht wird

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Hilfedatei der Oden$-Börse Stand Juni 2014

Übersicht. Was ist FTP? Übertragungsmodi. Sicherheit. Öffentliche FTP-Server. FTP-Software

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Um DynDNS zu konfigurieren, muss ausschließlich folgendes Menü konfiguriert werden:

Handbuch. timecard Connector Version: REINER SCT Kartengeräte GmbH & Co. KG Goethestr Furtwangen

Einrichtung eines -konto mit Thunderbird

Anleitung über den Umgang mit Schildern

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Proxy. Krishna Tateneni Übersetzer: Stefan Winter

Technische Dokumentation SilentStatistikTool

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

teamsync Kurzanleitung

ASA Schnittstelle zu Endian Firewall Hotspot aktivieren. Konfiguration ASA jhotel

Voraussetzungen für die Nutzung der Format Rechenzentrumslösung (Hosting)

Mobile und Verteilte Datenbanken

EVENTO-WEB. Handbuch für Dozierende. Version: 1.2 Datum: 20. Dezember 2010 Autoren: BA Schuladministration

STRATO Mail Einrichtung Mozilla Thunderbird

Nutzung von GiS BasePac 8 im Netzwerk

Programmieren in Java

Websites mit Dreamweaver MX und SSH ins Internet bringen

NOXON Connect Bedienungsanleitung Manual

Die Statistiken von SiMedia

Drucken aus der Anwendung

Programmierkurs Java

FTP-Server einrichten mit automatischem Datenupload für

Programmiermethodik. Übung 13

Eine eigene Seite auf Facebook-Fanseiten einbinden und mit einem Tab verbinden.

1 Mit einem Convision Videoserver über DSL oder ISDN Router ins Internet

Java: Vererbung. Teil 3: super()

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Anleitung zur Installation des Printservers

DynDNS Router Betrieb

Benutzerhandbuch - Elterliche Kontrolle

Gemeinsamer Bibliotheksverbund: Übertragung von Datenexporten für den Verbundkatalog Öffentlicher Bibliotheken

Übersicht Die Übersicht zeigt die Zusammenfassung der wichtigsten Daten.

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

7. TCP-IP Modell als Rollenspiel

Hochschulrechenzentrum

Modem: Intern o. extern

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage

Transkript:

Ausgewählte Implementierungsprobleme Rebecca Tiarks 19. Januar 2009 1 / 55

Inhaltsverzeichnis 1 2 2 / 55

Adressierung in IP-Netzen IP-Adresse 32 Bit lang zur besseren Lesbarkeit schreibt man die Bytes als Dezimalzahl mit Punkten getrennt 131.220.4.1 Kommunikation in einem Netzwerk und zwischen Netzwerken IP-Adresse besteht aus Netwerk-ID und Host-ID muss eindeutig sein 3 / 55

IP-Routing Verbindungsaufbau zwischen verschiedenen Netzwerken Netzwerke eigentlich voneinander getrennt Informationsaustausch mit Hilfe von Routern Router ist in mehreren Netzen enthalten ein Datenpaket wird es zuerst an den Router übermittelt kann der Router den Zielcomputer erreichen wird Paket direkt übermittelt ansonsten nachschauen in der Routing-Tabelle 4 / 55

DNS Domain Name System IP-Adressen sind schlecht zu merken Zuordnung von IP-Adressen zu DNS-Namen ein DNS-Name besteht aus dem Computernamen und der Domäne x11.informatik.uni-bremen.de Computer: x11 Domäne: informatik.uni-bremen.de 5 / 55

Client-Server-Schema Verbindungen laufen oft nach dem Client-Server-Schema ab ein Rechner stellt einen bestimmten Dienst zur Verfügung (Server) wartet passiv bis eine Verbindung zu ihm aufgebaut wird ein anderer Computer möchte Dienst nutzen (Client)und muss eine Verbindung zum Server aufbauen genaue Unterscheidung zwischen Client und Server schwierig, da Server auch wieder Client sein kann. ein Server soll mehrere Dienste anbieten können, deshalb Ports 6 / 55

Ports jeder Dienst auf dem Server läuft auf einem anderen Port Port-Nummer ist eine Ganzzahl und in Gruppe System und Benutzer eingeteilt System-Ports liegen zwischen 0-1023 User-Ports 1024-65535 Portnummern beliebig festlegbar allerdings inoffzielle Standards wie: FTP Port 21, HTTP Port 80 7 / 55

TCP/IP

TCP verschiedene Techniken zum kommunizieren über ein IP-Netz Aufbauen eines Kommunikationskanals (point-to-point) Daten können in beide Richtungen übertragen werden wird von TCP (Transmission Control Protocol) verwendet TCP ist verbindungsorientiert und zuverlässig automatische Fehlerkorrektur: Daten kommen so an wie sie verschickt wurden für jeden Computer muss ein eigener Kanal geöfnet werden 9 / 55

UDP UDP (User Datagram Protocol) verbindungslos und ohne Fehlerkorrektur Verwaltung der Datenpakete (Datagrams) muss selbst erleigt werden kein Verbindungsaufbau - schneller und weniger Netzwerkbelastung nur einzelne Datenpakete werden verschickt keine Überprüfung ob Pakete erfolgreich angekommen sind UDP unterstützt Multicasting (versenden an mehrere Empfänger) 10 / 55

Sockets Kommunikationsschnittstelle zwischen zwei Programmen zum Austausch von Daten über das Netzwerk Applikation fordert einen Socket vom Bestriebssystem an anschließend können Daten über den Socket verschickt und empfangen werden Betriebssystem verwaltet Sockets und Verbindungsinformationen Adresse ist IP und eine eindeutige Port Adresse Stream-Sockets kommunizieren über einen kontinuierlichen Zeichen-Datenstrom Datagramm Sockets basieren auf Senden von einzelnen Nachrichten 11 / 55

Client Client kennt IP-Adresse des Servers und erstellt ein Socket-Objekt zusätzlich muss noch die Portnummer bekannt sein Socket s = new Socket (" www.uni - bremen.de", 80); potentielle Probleme: der Konstruktor wandelt DNS-Name in IP um (evtl. kein Netzwerk erreichbar) UnknownHostException Umwandlung kostst Zeit, deshalb besser nur einmal vornehmen Klasse InetAdress InetAdress uni = InetAdress. getbyname (" www.uni - bremen.de"); Socket s = new Socket ( uni, 80); 12 / 55

Sockets nach Namensauflösung wird Verbindung aufgebaut ist an dem Port kein Server installiert ConnectException Sockets bestehen aus zwei Streams OutputStream zum Senden InputStream zum Empfangen diese kann man Abfragen mit getinputstream getoutputstream 13 / 55

Streams Streams (Datenströme) werden verwendet um Daten in ein Programm einzulesen, bzw. aus einem auszugeben zahlreiche Klassen in Java in dem Paket java.io Unterscheidung in zeichen- und byteorientiert zeichenorientiert für Buchstaben, Wörter, Texte byteorientiert für alle anderen Arten von Datenaustausch (Grafiken, Objekte) Grund: Zeichen basieren auf zwei Bytes, Daten nur auf einem 14 / 55

Zeichenorientierte Streams Klassen sind abgeleitet von der Klasse java.io.reader bzw. java.io.writer java.io.bufferedreader gepufferte, effiziente Eingabemöglichkeit java.io.inputstreamreader liest 1 Byte Zeichen ein und wandelt diese in 2 Byte Zeichen um java.io.filereader Zeichen aus Dateien einlesen mit autom. Umwandlung von 1 Byte in 2 Byte java.io.stringreader nutz String als Datenquelle (keine Daten aus der Umgebung) 15 / 55

FileReader public static void main ( String [] args ) { Reader read = null ; try { read = new FileReader ( " dir / file. txt " ); } for ( int c; ( c = read. read () )!= -1; ) System. out. print ( ( char ) c ); } catch ( IOException e ) { System. err. println ( " Error Occured " ); } finally { try { read. close (); } catch ( Exception e ) { } } 16 / 55

Byteorientierte Streams Klassen sind abgeleitet von der Klasse java.io.inputstream bzw. java.io.outputstream java.io.bufferedinputstream gepuffertes, effizientes einlesen java.io.fileinputstream Daten aus einer Datei lesen java.io.filterinputstream Daten können beim Einlesen gefiltert bzw. verarbeitet werden 17 / 55

Sockets nach Namensauflösung wird Verbindung aufgebaut ist an dem Port kein Server installiert ConnectException Sockets bestehen aus zwei Streams OutputStream zum Senden InputStream zum Empfangen diese kann man Abfragen mit getinputstream getoutputstream 18 / 55

Senden und Empfangen try { InputStream in = s. getinputstream (); OutputStream out = s. getoutputstream (); while ( true ) { byte b = ( byte )in. read (); out. write (b); } } catch ( Socket Exception e) { } catch ( IOException e) { } 19 / 55

Trennen von Senden und Empfangen gleichzeitiges Senden und Empfangen ist nicht ganz einfach Bsp. Daten von Tastatureingabe sollen an Server gesendet werden und Antwort soll am Bildschirm dargestellt werden Problem: Lesen der Daten und Empfangen blockieren beide die Ausführung Lösung: Aufteilung des Programms in einen sendenden und empfangenden Thread 20 / 55

Server Programm muss deutlich machen, dass es an einem Port einen Dienst zur Verfügung stellt dafür wird ein ServerSocket-Objekt erstellt ServerSocket server = new ServerSocket(5555) an Port 5555 wird ein Server registriert ist der Port bereits belegt gibt es eine BindException hat man nicht die Berechtigung einen Server zu betreiben (Port-Nummer von 0 bis 1023) gibt es es eine SecurityException immer mit close() beenden, sonst Port belegt 21 / 55

Auf eine Verbindung warten nach Registrierung muss Server auf Verbindung warten Methode accept() bei erfolgreicher Verbindung mit Client liefert wird Socket zurückgeliefert Socket kann genauso wie beim Client verwendet werden ServerSocket server = new ServerSocket (5555); Socket sock = server. accept () InputStream in = sock. getinputstream (); OutputStream out = sock. getoutputstream (); 22 / 55

TCP/IP

Verschicken von Paketen neben dem Verschicken der Pakete über einen sicheren Kanal (TCP) können Daten auch als einfache Pakete verschickt werden UDP keine Verbindungs- und Fehlerüberprüfung in Java die Klasse DatagrammSocket Pakete werden als Objekte von Typ DatagramPacket versendet neben den Nutzdaten werden noch weitere Informationen mitgesendet 24 / 55

UDP Header besteht aus vier 16-Bit Feldern Quell-Port Ziel-Port Länge Prüfsumme Daten Quellport: Portnummer des Senders (nötig damit Empfänger antworten kann) optional und kann auf 0 gesetzt werden Zielport: Empfänger Längenfeld gibt die Größe des Paketes an bestehend aus Daten und Header Prüfsummenfeld: optionale 16-Bit große Prüfsumme über Header und Daten (wird fast immer benutzt) 25 / 55

Informationen setzen je nachdem ob man ein Paket senden oder empfangen möchte Sendeprogramm gibt Informationen im Konstruktor an Erzeugen eines Feldes (hier mit Datum) Konstruktor für Paket benötigt das Feld gefolgt von der Länge außerdem IP und Port des Zielrechners muss die Klasse InetAdress verwendet werden byte [] buffer = ( newdate ()). tostring (). getbytes (); DatagramPacket pack = new DatagramPacket ( buffer, buffer. length, InetAdress. getbyname (" 192.168.0.1 "), 5556); 26 / 55

Empfangsprogramm Empfangsprogramm erzeugt Paket für den Empfang, muss aber nicht alle Informationen angeben nur die Informationen für das Byte-Array Puffer einrichten der die Daten des empfangenen Paketes aufnehmen kann WICHTIG: ist der Puffer zu klein gehen überschüssige Informationen verloren die einzelnen Informationen des Paketes lassen sich nachträglich setzen oder auslesen getadress, getport, getdata, getlength, getoffset setadress, setport, setdata, setlength, setoffset byte [] buffer = new byte [100]; DatagrammPacket receivepack = new DatagrammPacket ( buffer, 10 27 / 55

Senden und Empfangen Erzeugen eines DatagrammSocket-Objektes DatagramSocket udpsend = new DatagrammSocket (5555); DatagramSocket udpreceive = new DatagrammSocket (5556); zum Senden und Empfangen wird der entspr. Methode das Paket übergeben udpsend. send ( pack ); udpreceive. receive ( receivepack ); sobald ein Socket-Objekt nicht mehr gebraucht wird close() Methode aufrufen udpsend. close (); udpreceive. close (); 28 / 55

Mehrere Empfänger versenden an mehrere Empfänger Multicasting definieren einer Multicast-Gruppe bilden einer Gruppe über IP-Adressen bestimmter Bereich von IP-Adressen ist für Mehrfachadressierung vorgesehen 244.0.0.3 bis 255.255.255.255 29 / 55

Mitglieder einer Gruppe Clients müssen sich in eine Multicastgruppe eintragen zuerst wird ein Socket erstellt jedoch ein MulcticastSocket MulticastSocket udpreceive = new MulticastSocket (5600); Port-Nummer muss bei allen Gruppenmitgliedern identisch sein der Client muss der Multicastgruppe beitreten Methode joingroup aufrufen mit Multicast-IP InetAdress gruppe = InetAdress. getbyname (" 228. 2. 3. 4 "); udpreceive. joingroup ( gruppe ); Gruppe kann auch wieder verlassen werden (vor dem close() Aufruf) udpreceive. leavegroup ( gruppe ); 30 / 55

Senden an eine Gruppe Versenden durch Senden an die Gruppen-IP Sender muss nicht Mitglied der Gruppe sein DatagramPacket pack = new DatagramPacket ( buffer, buffer. length, InetAdress. getbyname (" 228.2.3.4 " ),5600); gemeinsamer Port der Gruppe wird verwendet 31 / 55

TCP/IP

URI und URL URI Uniform Resource Identifier besteht aus einer Zeichenfolge und ist ein Identifikator für eine abstrakte oder physische Ressource eine URL hat immer ein Protokoll und ist die Spezialisierung einer URI die URL enthält Informationen zum Auffinden einer Ressource (locator) in Java wird ein URL-Objekt durch die Klasse java.net.url repräsentiert 33 / 55

Zugriff auf Internet-Ressourcen URL Uniform Resource Locator Hilfsmittel zur Adressierung von Internet-Ressourcen eine URL besteht aus einem Protokollbezeichner und einer Adresse getrennt durch die Zeichenkette :// Standardprotokoll zur Übertragung von Webseiten http viele weitere: ftp, file, news Adresse besteht aus DNS-Namen und mit Doppelpunkt getrennt eine optionale Portnummer außerdem durch einen Schrägstrich getrennten Dateinamen http://www.informatik.uni-bremen.de/index.html 34 / 55

HTTP Protokoll auf Anwendungsschicht Anwendungen müssen Daten austauschen und jedes Programm hat eigene Anforderungen Schnelligkeit, Fehlerfreiheit usw. Protokolle auf der Anwendungsschicht sehr vielfältig HTTP (Hypertext Transfer Protocol) Webserver überträgt auf Anforderung eine Datei pro Verbindung immer nur eine Datei für zweite Datei neue Verbindung 35 / 55

URI und URL URI Uniform Resource Identifier besteht aus einer Zeichenfolge und ist ein Identifikator für eine abstrakte oder physische Ressource eine URL hat immer ein Protokoll und ist die Spezialisierung einer URI die URL enthält Informationen zum Auffinden einer Ressource (locator) in Java wird ein URL-Objekt durch die Klasse java.net.url repräsentiert 36 / 55

Zugriff auf Internet-Ressourcen Objekt kann über die String-Repräsentation erzeugt werden URL url = new URL (" http :// www.uni - bremen.de/ index. html "); weitere Konstruktoren zur getrennten Angabe der Zugriffsart, Host-Name, Port etc. URL url = new URL (" http ", " www.uni - bremen.de", 80, " index. html "); relative Adressen (Basisadresse muss bekannt sein) URL domainurl = new URL (" http :// www.uni - bremen.de"); URL indexurl = new URL ( domainurl, " index. html "); 37 / 55

Informationen über eine URL nach Anlegen des URL-Objektes können Informationen nur noch abgefragt werden nicht alle URL-Adressen lassen sich detailliert aufschlüsseln einige Zugriffsmethoden sind nur für HTTP sinnvoll getprotocol liefert Protokoll gethost liefert den Host-Namen falls möglich (file liefert leeren String) getport Port-Nummer oder -1 getref liefert Anker (alles nach dem #) getpath Pfad der URL ohne Anker getquery liefert Anfragestring (alles nach dem?) 38 / 55

Informationen über eine URL URL url = new URL ( " http :// www.b-sc.de /?p= Fahrten09 &m=1" ); System. out. println ( url. getprotocol () ); System. out. println ( url. gethost () ); System. out. println ( url. getport () ); System. out. println ( url. getfile () ); System. out. println ( url. getpath () ); System. out. println ( url. getquery () ); System. out. println ( url. getref () ); http www.b-sc.de -1 /?p=fahrten09&m=1 / p=fahrten09&m=1 null 39 / 55

Zugriff auf die Daten URL-Objekte besitzen die Methode openstream() liefert InputStream für den Empfang der Inhalte sind Objekte der Klasse URLConnction verantwortlich außerdem können auch Daten an eine URL gesendet werden (z.b. Formuare) Zugriff auch per Sockets möglich ohne die Klasse URL 40 / 55

Die Klasse URLConnection HTTP lastig, da viele Methoden haben nur für URLs auf Webseiten Bedeutung Klasse stellt Methoden bereit um HTTP-Header zu lesen Dateien vom Webserver besitzen Informationen über den Inhalt Inhalt kann abgefragt werden über getinputstream oder getcontent getcontent ist umständlich da eigene ContentHandler erforderlich sind 41 / 55

Arbeiten mit URL-Objekten 1. Erzeugen des URL-Connection-Objektes URLConnection connection = url. openconnection (); 2. Setzen der Anfrage-Attribute setdoinput soll Nutzer Input empfangen setdooutput darf Nutzer Output senden setconnecttimeout setzen eines Timeouts für eine Verbindung setreadtimeout Timout für das Lesen setzen.. und weitere 42 / 55

Arbeiten mit URL-Objekten 3. Verbindung herstellen (Methode erzeugt automatisch einen Socket und fragt die Header-Informationen ab) connection. connect (); 4. Header-Informationen können abgefragt werden getcontenttype Art des Inhalts z.b. text/plain getcontentlength Länge des Inhalts getdate Datum getlastmodified letztes Änderungsdatum 5. Zugriff auf die Daten getinputstream 43 / 55

Passwort geschützte Seiten Verbindungen können durch Basic Authentication (Passwort) geschützt sein Anwender müssen einen Namen und ein Passwort eingeben um mit einem Java-Programm an die Webseite zu kommen muss Name und Passwort gesendet werden. java.net.authenticator Authenticator. setdefault ( new Authenticator () { protected PasswordAuthentication getpasswordauthentication () { System. out. printf ( " url =%s, host =%s, ip =%s, port =%s%n", getrequestingurl (), getrequestinghost (), getrequestingsite (), getrequestingport () ); return new PasswordAuthentication ( " joeuser ", "a.b.c.d". tochararray () ); } 44 / 55

Verteilte Programmierung Methoden bieten Dienstleistung an liefert zu Eingabeparametern Ausgabewerte oder verändert einen Systemzustand liegt die implementierte Methode auf einem anderen Rechner enferte Methodenaufrufe Client-Server-Systeme Stellvertreterobjekte lassen die entfernte Server-Funktionen aussehen wie lokale Funktionen Stellvertreterfunktion nimmt Parameter, verpackt sie und schickt Anfrage an Stellvertreterfunktion auf dem Server 45 / 55

Java Remote Method Invocation Mechanismus um in Java entefernte Objekte und deren Angebote zu nutzen realisiert Methodenaufrufe auf hohem Abstraktionsniveau Server stellt das entfernte Objekt bereit. Funktion läuft im Adressraum vom Server und Server leitet Anfragen weiter Namensdienst (Registry) verbindet Objekte und ihre Methoden mit einem eindeutigen Namen Server meldet Objekte und Funktionen bei Namensdienst an Client ist Nutzer des Dienstes und ruft Methode zu entferntem Objekt auf (fragt beim Namensdienst anch ob er Zugriff bekommt) 46 / 55

Modell

Probleme Kommunikationssystem muss vorhanden sein: was passiert es zusammenbricht? beide Rechner haben unerschiedliche Lebenszyklen: können beide kommunizieren? Timout Bearbeitung nimmt viel mehr Zeit in Anspruch als bei lokalen Methoden gemeinsamer Kontext fehlt - unterschiedliche Speicherbereiche 48 / 55

Getrennter Speicher Daten müssen erst Übertragen werden Server arbeitet mit Kopie der Daten Objekte die von mehreren verwendet werden, Objektreferenzen? Übertragung der Objekte muss exklusiv erfolgen Objekte müssen immer vollständig serialisiert werden beide Partner müssen sich auf ein Austauschformat einigen 49 / 55

Umsetzung Server 1. entfernte Schnittstelle mit Methoden deklarieren damit entfernte Methode genutzt werden kann wird ein Stellvertreterobjekt benötigt wird von Java autom. erzeugt muss auf dem Server deklariert sein und die Signaturen eindeutig spezifiziert Java Interface mit den Methoden import java. rmi. Remote ; import. java. rmi. RemoteException ; public interface Mult extends Remote { int mult ( inx x, int y ) throws RemoteException ; } 50 / 55

Umsetzung Server 2. Remote-Objekt implementieren Client nutzt das Objekt vom Server Server muss die Remote-Schnittstelle implementieren diese kann anschließend exportiert und angemeldet werden public interface MultImpl extends Mult { int mult ( inx x, int y ) { return x * y; } } 51 / 55

Umsetzung Server 3. Anmelden beim Namensdienst (Registry) damit der Client das Objekt finden kann muss es mit öffentlichem Namen angemeldet werden -Registry kann durch Server selber oder externes Java-Dienstprogramm aufgerufen werden import java. rmi. registry.*; try { LocateRegistry. createregistry ( Registry. REGISTRY_ PORT ); MultImpl multi = new MultImpl (); Mult stub = ( Mult ) UnicastRemoteObject. exportobject ( multi, 0 ); } 52 / 55

Anmelden beim Namensdienst entweder erweitert die Remote-Objekt-Implementierung de Klasse UnicastRemoteObject oder das Objekt wird von Hand exportiert UnicastRemote-Object.exportObject() anschließend wird Objekt beim Namensdienst angemeldet rebind() oder bind() Notation beim Anmelden ist wie eine URL rmi://host:port/objektname 53 / 55

Umsetzung Client Client muss entferntes Objekt suchen und ansprechen fragt beim Namensdienst an zusammengesetzt aus URL und Dienstnamen public class Client { public static void main ( String [] args ) throws RemoteException, NotBoundException { Registry registry = LocateRegistry. getregistry (); Mult mult = ( Mult ) registry. lookup ( " Mult " ); } } 54 / 55

Christian Ullenboom. Java ist auch eine Insel. Galileo Computing, 7 edition, 2008. ISBN 978-3-8362-1146-8. 55 / 55