Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Java ist auch eine Insel (2. Aufl.) von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 1.4
Java ist auch eine Insel (2. Auflage)
gp Kapitel 16 Netzwerkprogrammierung
  gp 16.1 Grundlegende Begriffe
  gp 16.2 URL-Verbindungen und URL-Objekte
    gp 16.2.1 Die Klasse URL
    gp 16.2.2 Informationen über eine URL
    gp 16.2.3 Der Zugriff auf die Daten über die Klasse URL
  gp 16.3 Die Klasse URLConnection
    gp 16.3.1 Methoden und Anwendung von URLConnection
    gp 16.3.2 Protokoll- und Content-Handler
    gp 16.3.3 Im Detail: von URL zu URLConnection
    gp 16.3.4 Autorisierte URL-Verbindungen mit Basic Authentication
  gp 16.4 Das Common Gateway Interface
    gp 16.4.1 Parameter für ein CGI-Programm
    gp 16.4.2 Kodieren der Parameter für CGI-Programme
    gp 16.4.3 Eine Suchmaschine ansprechen
  gp 16.5 Host- und IP-Adressen
    gp 16.5.1 Klasse-K-Netz
    gp 16.5.2 IP-Adresse des lokalen Hosts
    gp 16.5.3 Die Methode getAllByName()
  gp 16.6 NetworkInterface
  gp 16.7 IPv6 für Java mit Jipsy
  gp 16.8 Socket-Programmierung
    gp 16.8.1 Das Netzwerk ist der Computer
    gp 16.8.2 Standarddienste unter Windows nachinstallieren
    gp 16.8.3 Stream-Sockets
    gp 16.8.4 Informationen über den Socket
    gp 16.8.5 Mit telnet an den Ports horchen
    gp 16.8.6 Ein kleines Echo – lebt der Rechner noch?
  gp 16.9 Client/Server-Kommunikation
    gp 16.9.1 Warten auf Verbindungen
    gp 16.9.2 Ein Multiplikations-Server
  gp 16.10 SLL-Verbindungen mit JSSE
  gp 16.11 Webprotokolle mit NetComponents nutzen
  gp 16.12 E-Mail
    gp 16.12.1 Wie eine E-Mail um die Welt geht
    gp 16.12.2 Übertragungsprotokolle
    gp 16.12.3 Das Simple Mail Transfer Protocol
    gp 16.12.4 E-Mails versenden mit Suns JavaMail-API
    gp 16.12.5 E-Mails mittels POP3 abrufen
  gp 16.13 Arbeitsweise eines Webservers
    gp 16.13.1 Das Hypertext Transfer Protocol (HTTP)
    gp 16.13.2 Anfragen an den Server
    gp 16.13.3 Die Antworten vom Server
  gp 16.14 Datagram-Sockets
    gp 16.14.1 Die Klasse DatagramSocket
    gp 16.14.2 Datagramme und die Klasse DatagramPacket
    gp 16.14.3 Auf ein hereinkommendes Paket warten
    gp 16.14.4 Ein Paket zum Senden vorbereiten
    gp 16.14.5 Methoden der Klasse DatagramPacket
    gp 16.14.6 Das Paket senden
    gp 16.14.7 Die Zeitdienste und ein eigener Server und Client
  gp 16.15 Internet Control Message Protocol (ICMP)
    gp 16.15.1 Ping
  gp 16.16 Multicast-Kommunikation


Galileo Computing

16.15 Internet Control Message Protocol (ICMPdowntop

Neben dem Internet-Protokoll werden noch mehrere Steuerprotokolle auf der Vermittlungsschicht eingesetzt. Darunter befindet sich auch das Internet Control Message Protocol (ICMP), das im Prinzip ein IP-Paket mit bestimmten Flags ist. Dieses ist im RFC 792 definiert. Da das Funktionieren des Internets sehr stark von Routern abhängt, wurde ICMP entwickelt, um unerwartete Ereignisse und Zusatzinformationen zu melden. Java unterstützt zurzeit nur Sockets vom Typ SOCK_STREAM (TCP) und SOCK_DGRAM (UDP), aber keine IP-Pakete (und damit auch nicht das Internet Control Message Protocol) mit dem Sock-Typ SOCK_RAW. Daher können in Java mit den Standardbibliotheken keine IP-Pakete und ICMP-Nachrichten verschickt werden. Für die kommende Version 1.5 ist eine Unterstützung angekündigt. Damit ergeben sich aber auch neue Rechts- und Sicherheitsprobleme. Viele Unix-Systeme erlauben Sockets vom Typ SOCK_RAW nur unter Root-Rechten.


Galileo Computing

16.15.1 Ping  toptop

Da Dienste wie »ping« oder »traceroute« auf ICMP aufbauen, ist eine Implementierung dieser Tools in Java momentan nicht möglich und so muss auf JNI zurückgegriffen werden. Eine Lösung unter Windows kommt von Isabel García und Óscar Fernández, die unter http://www.geocities.com/SiliconValley/Bit/5716/ping.html eine Bibliothek (ohne Quellcode) zur Verfügung stellen.

Ein Ping-Programm besteht im Wesentlichen aus der Initialisierung der Klasse, dem Absenden eines Pings und dem Empfang eines Pongs. Das empfangene Datenpaket liegt dabei in einem String-Feld aus vier Werten, in denen dann Zeit und IP-Adressen des Partners liegen:

String dataRcv[] = new String[4];

PingICMP ping = new PingICMP();

ping.begin();

if ( ping.ping("127.0.0.1", 5, 1) )
{
  ping.pong( dataRcv );
  System.out.println( "Host:       " + dataRcv[0] +
                      " ping time: " + dataRcv[3] );
}
final class estadisticas.icmp.PingICMP

gp  PingICMP ()
Erzeugt ein neues PingICMP-Objekt.
gp  final boolean begin ()
Initialisiert den Socket zum Senden und Empfangen. Nur genau ein Socket darf offen sein. Der Rückgabewert ist false, falls der Socket nicht initialisiert werden konnte.
gp  final boolean end ()
Schließt den Socket, sodass später noch einmal mit begin() eine Sitzung eröffnet werden kann. Der Rückgabewert ist false, falls der Socket nicht geschlossen werden konnte.
gp  final boolean ping( String address, int identifier, int seqNumber )
Sendet ein ping an die IP-Adresse des Empfängers. Der Identifizierer ist wie die Sequenznummer eine Zahl zwischen 0 und 65.535. Der Rückgabewert ist false, falls das Paket nicht versendet werden konnte oder ein Parameter falsch ist.
gp  final boolean pong( String results[] )
Die Funktion wartet so lange blockierend, bis ein Echo eintrifft. Das bestehende Feld wird mit vier Werten gefüllt. Der erste Wert ist die IP-Adresse der entfernten Maschine, dann folgt die Identifikation, die Sequenznummer und an Position drei die Ping-Zeit. Die Rückgabe ist false, falls ein Fehler auftritt oder das Feld nicht mindestens vier Elemente fasst. ping()/pong() sollte mehrmals aufgerufen werden, damit die Zeiten repräsentativ sind.




Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de