Seminarbericht Netzwerk-Programmierung mit MIDP 2.0



Ähnliche Dokumente
Anbindung des eibport an das Internet

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

E Mail Versand mit der Schild NRW Formularverwaltung

teamsync Kurzanleitung

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

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

CMS.R. Bedienungsanleitung. Modul Cron. Copyright CMS.R Revision 1

INTERNET UND MMS MIT DEM QTEK2020 MARCO 28. MÄRZ 04

Dokumentation IBIS Monitor

Transmission Control Protocol (TCP)

C.M.I. Control and Monitoring Interface. Zusatzanleitung: Datentransfer mit CAN over Ethernet (COE) Version 1.08

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

FuxMedia Programm im Netzwerk einrichten am Beispiel von Windows 7

inviu routes Installation und Erstellung einer ENAiKOON id

PhPepperShop Modul Remarketing. Datum: 13. September 2013 Version: 1.2. Warenkorb Wiederherstellung. Bestellabbruch Benachrichtigung.

Voraussetzung. Anleitung. Gehen Sie auf Start Einstellungen und suchen Sie hier den Eintrag Datenverbindungen oder Verbindungen. Öffnen Sie diesen.

Professionelle Seminare im Bereich MS-Office

Hilfedatei der Oden$-Börse Stand Juni 2014

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

WLAN Konfiguration. Michael Bukreus Seite 1

Guide DynDNS und Portforwarding

Technische Dokumentation SilentStatistikTool

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

Mail-Signierung und Verschlüsselung

Routing im Internet Wie findet ein IP Paket den Weg zum Zielrechner?

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: )

How to install freesshd

ecaros2 - Accountmanager

MODBUS/TCP und Beckhoff Steuerelemente

MC-Hx 006. Einbindung des MC-Hx Modul als MODBus TCP Slave. MB DataTec GmbH. Stand:

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

Drucken aus der Anwendung

Kommunikations-Parameter

Datenbanken Kapitel 2

Stepperfocuser 2.0 mit Bootloader

Flashfragen in ILIAS Test & Assessment. Helmut Schottmüller

Sie können diesen Service verwenden, um fast beliebig große Dateien auch über 2 GB zu versenden.

OP-LOG

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

STRATO Mail Einrichtung Mozilla Thunderbird

Step by Step Webserver unter Windows Server von Christian Bartl

Tutorial -

ASA Schnittstelle zu Endian Firewall Hotspot aktivieren. Konfiguration ASA jhotel

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

Electronic Systems GmbH & Co. KG

Einrichtung des GfT Leitsystems für GPRS Verbindungen

Enigmail Konfiguration

HANDBUCH PHOENIX II - DOKUMENTENVERWALTUNG

Einführung in die Programmierung

Serienbrieferstellung in Word mit Kunden-Datenimport aus Excel

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach

Software- und Druckerzuweisung Selbstlernmaterialien

Dokumentenverwaltung im Internet

Print2CAD 2017, 8th Generation. Netzwerkversionen

3 Konfiguration OfficeMaster 3.10 SNMP


Lokale Installation von DotNetNuke 4 ohne IIS

ecaros2-admin ecaros2 - Admin procar informatik AG 1 Stand: FS 01/2013 Eschenweg Weiterstadt

WinWerk. Prozess 6a Rabatt gemäss Vorjahresverbrauch. KMU Ratgeber AG. Inhaltsverzeichnis. Im Ifang Effretikon

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Pädagogische Hochschule Thurgau. Lehre Weiterbildung Forschung

Erstellen von x-y-diagrammen in OpenOffice.calc

Aufruf der Weboberflache des HPM- Warmepumpenmanagers aus dem Internet TIPPS

Anton Ochsenkühn. amac BUCH VERLAG. Ecxel für Mac. amac-buch Verlag

MMS - Update auf Version 4.4

Anleitung Grundsetup C3 Mail & SMS Gateway V

Update von XBRL Publisher auf XBRL Publisher 1.7.2

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

Anleitung Postfachsystem Inhalt

Synchronisations- Assistent

Hinweise zur Datensicherung für die - Prüfmittelverwaltung - Inhalt

Programmieren I. Kapitel 15. Ein und Ausgabe

Erstellen eigener HTML Seiten auf ewon

Der lokale und verteilte Fall

Modem: Intern o. extern

Anbindung des Onyx Editors an das Lernmanagementsystem OLAT Anwendungsdokumentation

Gruppenrichtlinien und Softwareverteilung

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

Konfiguration der tiptel Yeastar MyPBX IP-Telefonanlagen mit Peoplefone Business SIP Trunk

Konfiguration des Fernzugriffes auf Eyseo-IP-Netzwerkkameras mittels dynamischer IP-Adresse

Dokumentenverwaltung

mobilepoi 0.91 Demo Version Anleitung Das Software Studio Christian Efinger Erstellt am 21. Oktober 2005

OS IDE Webserver Integration des Webservers in die IDE Wireshark Webserver II Dynamisches Webprojekt in Eclipse

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

Technical Note ewon über DSL & VPN mit einander verbinden

How-to: Mailrelay und Spam Filter. Securepoint Security System Version 2007nx

Ein neues Outlook Konto können Sie im Control Panel über den Eintrag Mail erstellen.

Terminabgleich mit Mobiltelefonen

mobifleet Beschreibung 1. Terminverwaltung in der Zentrale

So geht s Schritt-für-Schritt-Anleitung

MSXFORUM - Exchange Server 2003 > Konfiguration NNTP unter Exchange 2003

Anleitung zur Konfiguration eines NO-IP DynDNS-Accounts mit der TOOLBOXflex-3.2

Klicke auf den Button "Hinzufügen" und wähle die Option " ", um einen neuen -account

Hilfe Bearbeitung von Rahmenleistungsverzeichnissen

Microsoft Outlook 2010 Handbuch

Handbuch ECDL 2003 Professional Modul 3: Kommunikation Stellvertreter hinzufügen und zusätzliche Optionen einstellen

Transkript:

Seminarbericht mit MIDP 2.0 Fachhochschule Nordwestschweiz FHA-Windisch Autor: Abteilung: Betreuung: Marco Rietmann Informatik Prof. Dr. Dominik Gruntz Referat am: 5.1.2005 Seite 1 von 18

Abstract 1 MIDP 1.0 provided only one core way of connecting to the outside networked world -- an HTTP connection. Version 2.0 expands the connection options available to developers with a number of new network I/O capabilities. As optional low-level networking capabilities for TCP/IP sockets and UDP/IP datagrams are provided. The most interesting capability introduced in the MIDP 2.0 spec is the push registry. A MIDlet can register an inbound connection listener over which the MIDlet can be activated when it is not running. This way, a MIDlet can provide services even when it is not actively running. This seminar report explains these new features. 1 Written by Dominik Gruntz Seite 2 von 18

Inhaltsverzeichnis 1 Erweiterungen von MIDP 2.0 im Überblick... 4 1.1 MIDP 1.0... 4 1.2 MIDP 2.0... 5 2 TCP-Verbindung... 6 2.1 Client... 7 2.1.1 SocketConnection:... 7 2.1.2 Input- und Outputstream:... 8 2.2 Server... 9 2.2.1 Erstellen einer ServerSocketConnection... 9 2.2.2 Die Methode acceptandopen()... 9 3 UDP-Verbindungen... 10 3.1 DatagramConnection... 10 3.2 Datagram... 11 3.2.1 Datagram senden... 11 3.2.2 Datagram empfangen... 11 4 Swisscom GPRS... 12 5 Konzepte für den Aufbau einer Natel Natel-Verbindung... 13 5.1 Mit Hilfe eines Webservers:... 13 5.2 Mit SMS:... 14 6 Push Registry... 15 6.1 Statische Registrierung... 15 6.2 Dynamische Registrierung... 16 6.3 Alarm-Registrierung... 17 6.2.1 Die SMS Variante mit der Push Registry:... 17 7 Literaturverzeichnis... 18 Seite 3 von 18

1 Erweiterungen von MIDP 2.0 im Überblick In MIDP 1.0 waren die Funktionalitäten bezüglich Netzwerk sehr eingeschränkt. Es waren nur HTTP-Verbindungen möglich. In MIDP 2.0 wurden die Möglichkeiten stark erweitert. Die Programmierung von UDP- und TCP Servern und Clients ist nun möglich. Ebenfalls werden Verbindungen über die Seriell- und Infrarotschnittstelle unterstützt. Eine zweite gravierende Erneuerung ist die Push Registry. Die Push Registry ist eine vom Gerät verwaltete Tabelle, in welcher man MIDlets eintragen kann, die auf bestimmte Ereignisse gestartet werden, wie zum Beispiel das Ankommen eines UDP Paketes, einer TCP- Verbindung oder eines SMS. 1.1 MIDP 1.0 Bild 1 In MIDP 1.0 kann die Factory-Klasse Connector nur HTTP-Verbindungen aufbauen. Die Methode Connection Connector.open(String url)öffnet eine HTTP-Verbindung zur angegebenen URL. Sie wurde schon in MIDP 1.0 so konzipiert, dass sie auch weitere Verbindungen öffnen kann. Deswegen hat sie den Rückgabetyp Connection. Wie man im Bild 1 erkennen kann, sind alle Verbindungen von diesem Interface abgeleitet. Beispiel für das Erstellen einer HTTP-Verbindung in MIDP 1.0 Connection c = (HttpConnection)Connector.open( http://www.yahoo.com/ ); Seite 4 von 18

1.2 MIDP 2.0 Bild 2 In MIDP 2.0 kann die Methode Connector.open(String url)mehrere verschiedene Connection-Typen erstellen. Hier eine Tabelle mit einigen Möglichkeiten: URL Rückgabe Interface Protokoll socket://host:port SocketConnection TCP (Client) socket://:port ServerSocketConnection TCP (Server) ssl://host:port SecureConnection SSL/TLS datagram://host:port UDPDatagramConnection UDP datagram://:port UDPDatagramConnection UDP http://host:port/file?querry HttpConnection HTTP https://host:port/file?query HttpsConnection HTTPS comm://port;parameters CommConnection Seriell / Infrarot Seite 5 von 18

Wie man in Bild 2 erkennen kann, sind auch in MIDP 2.0 alle Verbindungsinterfaces von der Connection-Klasse abgeleitet. Je nach Gerät sind weitere optionale Verbindungsmöglichkeiten vorhanden, zum Beispiel folgende aus dem WMA-Package. Mit diesen Verbindungsvarianten können SMS und MMS versendet und empfangen werden. URL Rückgabe Interface Protokoll sms://phonenumber:port MessageConnection SMS an ein MIDlet sms://phonenumber MessageConnection SMS normal sms://:port MessageConnection SMS empfangen mms://phonenumber MessageConnection MMS normal Die Methode Connection.open() erlaubt auch die Einschränkung auf nur Lesen oder nur Schreiben. Connector.open(URL,Connector.READ) Connector.open(URL,Connector.WRITE) Ebenfalls kann angegeben werden, ob das MIDlet Timeouts behandeln kann oder nicht. Connector.open(URL,Connector.READ_WRITE, true) Connector.open(URL,Connector.READ_WRITE, false) //Timouts //Keine Timeouts Der Timeout-Intervall lässt sich jedoch nicht einstellen. 2 TCP-Verbindung Bild 3 Beim Transmission-Control-Protokoll wird eine Verbindung zwischen zwei Geräten aufgebaut. Es gibt, den Server, welcher auf eine eingehende Verbindung wartet, und einen oder mehrere Clients, welche eine Verbindung zum Server aufbauen (siehe Bild 3). Über einen Input- und einen OutputStream können jeweils Daten gesendet und empfangen werden. Das Protokoll stellt die Reihenfolge und die Richtigkeit der Daten sicher. Seite 6 von 18

2.1 Client try { //2.1.1 sc = (SocketConnection) Connector.open("socket://localhost:5000"); //2.1.2 is = sc.openinputstream(); os = sc.openoutputstream(); os.write("hallo".getbytes()); os.flush(); //Stellt sicher, dass alle Daten gesendet wurden StringBuffer sb = new StringBuffer(); int c = 0; while (((c = is.read())!= -1)) { sb.append((char) c); catch (Exception e) { e.printstacktrace(); finally{ try { //Schliessen der Verbindungen os.close(); is.close(); sc.close(); catch (Exception e) { e.printstacktrace(); Code Beispiel 1 2.1.1 SocketConnection: Eine TCP-Verbindung startet man mit der URL socket://host:port. Da Connector.open() den Typ Connection hat, muss der Rückgabewert noch in eine SocketConnection geparst werden. Im Objekt SocketConnection können einige Optionen gesetzt werden. Dies wird mit der Methode setsocketoption (byte option, int wert) gemacht. Mit getsocketoption(byte option) können die Einstellungen wieder ausgelesen werden. Die Möglichkeiten sind in folgender Tabelle festgehalten. Option (byte) Beschreibung SocketConnection.DELAY Schaltet den so genannten Nagle-Algorithmus ein oder aus. Mögliche Werte: 0 = aus, nicht 0 = ein. Dieser Algorithmus sammelt erst einige Daten, bevor er sie weitersendet. Er verhindert somit einen grossen Overhead bei kleinen Datenmengen. SocketConnection.KEEPALIVE Sendet periodisch leere Segmente, um die Verbindung aufrechtzuerhalten. Mögliche Werte: 0 = aus, nicht 0 = ein. SocketConnection.LINGER Setzt die Zeitdauer, welche beim Schliessen der TCP- Verbindung abgewartet werden soll, bis im Sende- Buffer liegende Daten geschickt wurden. SocketConnection.RCVBUF Der TCP-Implementierung wird für den Empfangs- Buffer eine Länge in Bytes vorgeschlagen. SocketConnection.SENDBUF Der TCP-Implementierung wird für den Sendebuffer eine Länge in Bytes vorgeschlagen. Seite 7 von 18

Mit folgenden Methoden können die Adressen und Ports aus der Klasse SocketConnection gelesen werden. getaddress() getport() getlocaladdress() getlocalport() 2.1.2 Input- und Outputstream: Die SocketConnection stellt einen Input- und einen OutputStream bereit. Über den OutputStream können Daten gesendet, über den InputStream empfangen werden. Die Streams können wie folgt aus der SocketConnection geholt werden. openinputstream() opendatainputstream() openoutputstream() opendataoutputstream() In speziellen Fällen können diese Methoden auch direkt auf der Connector-Klasse aufgerufen werden. Man erspart sich dadurch einige Zeilen Code. Diesen gleichnamigen Methoden der Klasse Connector muss man aber noch die URL als Parameter angeben. Mit der Klasse OutputStream können Zeichen über die Verbindung geschickt werden. Dies kann mit folgenden Methoden erreicht werden (siehe auch Code Beispiel 1): write(int); write(bytes[], int, int) write(bytes[]); Mit der Klasse DataOutputStream können zusätzlich zu den Zeichen auch verschiedene andere Datentypen versendet werden. Wie an den zur Verfügung stehenden Methoden erkannt werden kann. write(int); write(bytes[], int, int) writeboolean(boolean arg) writeshort(int arg) writechar(int arg) writeint(int arg) writelong(long arg) writechars(string arg) writeutf(string arg) writeutf(string arg, DataOutput arg) Analog dazu die Klassen InputStream und DataInputStream mit den read-methoden. readboolean(); readshort(); u.s.w. Seite 8 von 18

2.2 Server try { //2.2.1 scn = (ServerSocketConnection) Connector.open("socket://:5000"); //2.2.2 sc = (SocketConnection) scn.acceptandopen(); //2.1.2 is = sc.openinputstream(); os = sc.openoutputstream(); StringBuffer sb = new StringBuffer(); int c = 0; for(i=0; i<5; i++){ sb.append((char) c); if(sb.tostring().equals( hallo )){ os.write("hallo".getbytes()); catch (Exception e) { e.printstacktrace(); finally{ try { //Schliessen der Verbindungen os.close(); is.close(); sc.close(); scn.close(); catch (Exception e) { e.printstacktrace(); Code Beispiel 2 Dieser Server ist das Gegenstück zu dem in Code Beispiel 1 beschriebenen Clienten. 2.2.1 Erstellen einer ServerSocketConnection Wenn man in der URL keine Adresse angibt, bekommt man von der Methode Connector.open() eine ServerSocketConnection zurück. Die ServerSocketConnection hängt sich an den angegebenen Port und wartet auf eingehende Verbindungen. Diese werden von der Methode acceptandopen() zurückgegeben. 2.2.2 Die Methode acceptandopen() In der Methode acceptandopen() wird auf eine eingehende Verbindung gewartet. Wenn eine solche eintrifft, wird eine SocketConnection zurückgegeben. In einem richtigen Server würde man diese in der run()-methode eines Threads, in einer while(true)-schleife warten lassen. Nach dem Zustandekommen der Verbindung wird dann ein neuer Thread gestartet (Code Beispiel 3). Seite 9 von 18

public void run(){ try { while(true){ scn = (ServerSocketConnection) Connector.open("socket://:5000"); Thread t = new Thread(new Verbindung(scn.acceptAndOpen())); t.start(); catch(exception e){... Code Beispiel 3 3 UDP-Verbindungen Das User-Datagram-Protokoll erstellt keine Verbindung, es unterstützt lediglich das Senden und Empfangen von maximal 64Kb grossen Datagram-Paketen. Es wird nur die Richtigkeit des Inhaltes jeden Datagram-Paketes garantiert, nicht aber, ob es ankomme. Auch wird die Reihenfolge, in der die Pakete eintreffen, nicht garantiert. //3.1 DatagramConnection dc = (DatagramConnection) Connector.open("datagram://:5555"); try { //3.2.1 byte[] bytes = hallo.getbytes(); dg = dc.newdatagram(bytes, bytes.length, address); dc.send(dg); //3.2.2 Datagram dg = dc.newdatagram(100); dc.receive(dg); si.settext("message received - " + new String(dg.getData(), 0, dg.getlength())); catch (Exception e) { e.printstacktrace(); Code Beispiel 4 3.1 DatagramConnection Die Klasse DatagramConnection ist vergleichbar mit der DatagramSocket der Java Standardedition. Das Wort Connection kommt von dem Connection Framework, hat aber nichts mit einer Verbindung zu tun, denn UDP ist verbindungslos. Es gibt zwei Varianten, eine DatagramConnection zu erstellen. Bei der einen gibt man gleich eine Adresse mit: Connector.open( datagram://adresse:port ). Das ist geeignet, wenn man mit dieser DatagramConnection nur mit einem einzigen Rechner kommunizieren will. Bei der anderen Variante erstellt man eine DatagramConnection ohne Adresse. Connector.open( datagram://:port ) Der Port wird als Ziel für die Pakete verwendet. Ebenfalls werden Pakete auf diesem Port empfangen. Die Connector.open()-Methode gibt so eine UDPDatagramConnection zurück, welche das Interface DatagramConnection implementiert (siehe Code Beispiel). Es wäre auch folgender Aufruf möglich: Seite 10 von 18

UDPDatagramConnection dc = (UDPDatagramConnection) Connector.open("datagram://:5555"); Mit der DatagramConnection können Pakete (Datagramme) erstellt und verschickt werden. Dafür werden folgende Methoden angeboten. int getmaximumlength() int getnominallanght() Datagram newdatagram(byte[] buf, int size) Datagram newdatagram(byte[] buf, int size, String address) Datagram newdatagram(int size) Datagram newdatagram(int size, String address) void receive(datagram dgram) void send(datagram dgram) Die UDPDatagramConnection lässt zusätzlich weitere Methoden zu, die den lokalen Port und die lokale Adresse zurückgeben. String getlocaladdress() int getlocalport() 3.2 Datagram Methoden: String getaddress() Byte[] getdata() Int getlength() Int getoffset() Void reset() Void setaddress(datagram reference) Void setaddress(string address) setdata(byte[] buffer, int offset, int Length) setlength(int length) Zusätzlich unterstützt das Datagram auch fast alle Schreibmethoden des DataOutputStreamund alle Lesemethoden des DataInputStream-Interfaces (siehe 2.1.2). 3.2.1 Datagram senden Mit der Methode newdatagram(byte[] buf, int size) wird ein neues Datagram erzeugt. Dieses enthält die Zieladresse des DatagramConnection-Objektes. Mit der Methode newdatagram(byte[] buf, int size, string address) kann ein neues Datagram mit eigener Zieladresse erzeugt werden. Das Datagram kann mit der send()-methode verschickt werden (siehe Code Beispiel 4). 3.2.2 Datagram empfangen Zum Empfangen eines Datagrams muss zuerst ein leeres Datagram angelegt werden. Ein Datagram kann mit der Methode newdatagram(int size) erstellt werden. Hier wird eine maximale Grösse der zu empfangenden Daten festgelegt. Das Datagram kann nun in der receive()-methode mit den zu empfangenden Daten aufgefüllt werden (siehe Code Beispiel 4). Seite 11 von 18

4 Swisscom GPRS Bild 4 Im Swisscom GPRS-Netz werden die Adressen der Natels dynamisch verteilt. Jedes Natel, das sich auf das GPRS-Netz einwählt, erhält eine Private-Network-IP-Adresse der Klasse A. Also: 10. *. *. * Dieses Private Network wird über den GGSN (Gateway GPRS Support Node) in das Internet geroutet. Dieser GGNS besteht aus verschiedenen Routern und Firewalls (siehe Bild 4). Mit dieser Infrastruktur sind folgende Verbindungsvarianten möglich: GPRS WWW GPRS GPRS (ohne Aktivierung im GGNS nicht möglich.) Da die IP-Adressen dynamisch vergeben werden und nicht mit den jeweiligen Nummern verknüpft sind, benötigt man spezielle Konzepte für den Verbindungsaufbau (siehe Kapitel 5) Die Verbindung WWW GPRS wird momentan aus Sicherheitsgründen noch nicht unterstützt. Seite 12 von 18

5 Konzepte für den Aufbau einer Natel Natel-Verbindung 5.1 Mit Hilfe eines Webservers: Bild 5 Hierfür braucht es einen Webserver mit einer Datenbank und fester, bekannter Adresse. Jedes Server-Natel sendet seine Adresse und seinen Namen dem Webserver, und dieser speichert sie in der Datenbank. Wenn nun ein Client-Natel zu einem Server-Natel eine Verbindung aufbauen will, muss es zuerst den Webserver nach der Adresse des Server-Natels fragen (siehe Bild 5). Seite 13 von 18

5.2 Mit SMS: Bild 6 In diesem Konzept sind die Funktionen von Client und Server vertauscht. Hier baut der Server die Netzwerkverbindung zum Client auf. Der Server wird sozusagen zum Mehrfachclient und der Client zum Einfachserver. Auf ein SMS, das die Clientadresse beinhaltet, erstellt der Server eine Verbindung mit dem Client (siehe Bild 5). Seite 14 von 18

6 Push Registry Die Push Registry besteht aus einer in jedem MIDP-2.0-fähigen System eingebauten Tabelle. Wenn nun eine Verbindung mit dem Gerät erstellt wird, wird zuerst in der Tabelle nachgeschaut. Existiert für diese Verbindung ein passender Eintrag, wird das entsprechende MIDlet gestartet. Wenn ein MIDlet auf das Eingehen einer Verbindung gestartet werden soll, braucht es einen Eintrag in dieser Tabelle. Er werden grundsätzlich alle Verbindungen unterstützt, welche auch von der Connector.open() -Methode unterstützt werden. Die Tabelle sieht folgendermassen aus: URL Klassenname Allowed Sender socket://:5000 MyMidlet 147.86.*.* datagramm://5001 MyMidlet * sms://:1000 MyMidlet +4156* URL repräsentiert die selbe URL, die danach durch den Connector.Open()-Aufruf verwendet wird. Klassenname: Der vollqualifizierte Klassenname des zu startenden MIDlets. Allowed Sender spezifiziert die Adressen der erlaubten Kommunikationspartner. Es werden folgende Platzhalter erlaubt: o? steht für ein einzelnes Zeichen o * steht für mehrere Zeichen Es gibt zwei Möglichkeiten, wie sich ein MIDlet in der Push Registry eintragen kann: Die statische Registrierung und die dynamische Registrierung. 6.1 Statische Registrierung Das MIDlet wird bei der Installation in die Push Registry Tabelle eingetragen. Diese Eintragungen müssen im Applikationsdescriptor angegeben werden. Man kann dies jedoch relativ einfach mit dem Wireless Toolkit erledigen. Hierfür muss man auf Settings klicken und dann auf den Tab Push Registry wechseln (siehe Bild 7). Hier können die Eintragungen spezifiziert werden, welche bei der Installation in der Push Registry vorgenommen werden sollen. Seite 15 von 18

Bild 7 6.2 Dynamische Registrierung Bei der Dynamischen Registrierung wird ein MIDlet während der Laufzeit in die Push Registry eingetragen. Dafür wird die Klasse PushRegistry verwendet. Diese stellt folgende Methoden zur Verfügung: String getfilter(string connection) Liefert den Allowed Sender Wert zurück. String getmidlet(string connection) Liefert den Klassennamen des MIDlets zurück. String[] listconnections(boolean available) o Available = false: Liefert alle zum aufrufenden MIDlet eingetragenen Connections. o Available = true: Liefert nur diejenigen Connections, an welchen Input anliegt. void registerconnection(string connections, String midlet, String filter) erstellt einen neuen Eintrag in die Push Registry. boolean unregisterconnection(string connection) Löscht einen Eintrag. o false, wenn Eintrag nicht existiert. o SecurityException: Wenn Eintrag existiert, aber nicht entfernt werden darf. Seite 16 von 18

6.3 Alarm-Registrierung Dies ist ein weiterer Mechanismus, womit ein MIDlet gestartet werden kann. Dieser kann nur mit der dynamischen Variante verwendet werden. Das MIDlet wird zu einem bestimmten Zeitpunkt wieder gestartet. Es kann im Gegensatz zu der Connection-Registrierung pro MIDlet nur ein Eintrag in die Push Registry abgelegt werden. Die Klasse PushRegistry stellt hierfür auch nur eine einzige Methode zur Verfügung: long registeralarm(string midlet, long time) Der Rückgabewert ist die alte Zeit. Der erste Parameter ist die Klasse des MIDlets. Der zweite Parameter ist die neue Zeit, bei der das MIDlet gestartet werden soll. Ist der zweite Parameter 0, wird das MIDlet aus der Push Registry entfernt. Hinweis: Die Zeit wird in Millisekunden angegeben. Die aktuelle Zeit kann mit long System.currentTimeMillis() geholt werden. 6.2.1 Die SMS Variante mit der Push Registry: Bei der SMS Variante kann man beim Server relativ einfach die Push Registry verwenden. Hierfür ist die statische Registrierung vorzuziehen. Das ergibt in den Settings unter Push Registry folgenden Eintrag: Kye Connection URL Class AllowedSender MIDlet-push-1 sms://:1000 smscon.myserver * Nach der Installation wird nach Erhalt eines SMS auf dem Port 1000 automatisch die Serverapplikation smscon.myserver gestartet und eine Verbindung zum Client aufgebaut. Damit die Push Registry mit dem Wireless Toolkit getestet werden kann, muss die Applikation mit Projekt run via OTA gestartet werden. Das geht folgendermassen: 1. Project Build 2. Project Package Create Package 3. Project run via OTA Seite 17 von 18

7 Literaturverzeichnis Wireless Toolkit: MIDP API Dokumentation. Weblinks: http://developers.sun.com/techtopics/mobility/midp/articles/pushreg/ http://www.corej2me.com/developerresources/ibm/pushtechnology.pdf http://jan.netcomp.monash.edu.au/internetdevices/wireless/wma.html Buch: Java 2 Micro Edition von Klaus-Dieter Schmatz 1.Auflage 2004 Seite 18 von 18