next up previous contents
Next: 3.3.12 Bewertung Up: 3.3 Anwendungsentwicklung Previous: 3.3.10 Kompilieren der Beispiele

Testläufe der Programme

  Der IPv4-Server wird mit v4_tcpserver gestartet. Er gibt dann die ihm zugeordnete Portnummer aus. Hier:
Zugeordneter Port: 2143

Ein IPv4-Client kann z.B. mit v4_tcpclient pchegering2 2143 test die Nachricht test an den Server schicken. Der Client gibt den mit gethostbyaddr() ermittelten offiziellen Namen des angegebenen Rechners aus:

offizieller Name: pchegering2.nm.informatik.uni-muenchen.de,\
IP-Adresse: 129.187.214.42

Der Server gibt die Nachricht und ihre Quelle aus:

Verbindungswunsch von Host pchegering2.nm.informatik.uni-muenchen.de\
(129.187.214.42), Port 2727
Mitteilung: test
Beende Verbindung

Da kein Rechnername gleichzeitig mit einer IPv6- und einer IPv4-Adresse im DNS eingetragen ist, wurde zu Testzwecken in /etc/hosts dieser Eintrag vorgenommen:

5f04:fb00:81bb:d600:d6:800:98b:a8d8     pc2
129.187.214.42                          pc2

Die Namensauflösung der C-Bibliothek Version 5 kommt mit der IPv6-Adresse von pc2 erwartungsgemäß nicht zurecht:

$ v4_tcpclient pc2 2143 test
offizieller Name: pc2, IP-Adresse: 255.255.255.255
connect: Network is unreachable

Die neuen Funktionen im protokollunabhängigen v6v4_tcpclient dagegen schon. Dieser versucht zuerst, den Server über IPv6 zu erreichen, nachdem dies scheitert, gelingt es ihm über IPv4:

$ v6v4_tcpclient pc2 2143 test

Record 0:
ai_flags:      2(2)
ai_family:     inet6(10)
ai_socktype:   stream(1)
ai_protocol:   6(6)
ai_addrlen:    18(24)
ai_canonname:  pc2
ai_addr:       pc2.2143(5f04:fb00:81bb:d600:d6:800:98b:a8d8.2143)

Trying pc2.2143(5f04:fb00:81bb:d600:d6:800:98b:a8d8.2143)
connect: Connection refused(111)


Record 1:
ai_flags:      2(2)
ai_family:     inet(2)
ai_socktype:   stream(1)
ai_protocol:   6(6)
ai_addrlen:    10(16)
ai_canonname:  pc2
ai_addr:       pchegering2.nm.informatik.uni-muenchen.de.2143\
               (129.187.214.42.2143)

Trying pchegering2.nm.informatik.uni-muenchen.de.2143\
      (129.187.214.42.2143)

Die Funktionen gethostbyname2() und gethostbyaddr() der verwendeten Resolver-Bibliotheken sind offenbar fehlerhaft. Der v6_tcpclient meldet entweder gethostbyaddr: Unknown host oder wird vom Betriebssystem mit einem Segmentation fault beendet. Der v6_tcpserver meldet bei einer Verbindungsaufnahme mit dem protokollunabhängigen Client gethostbyaddr: Unknown error.

Die protokollunabhängigen Beispiele funktionieren als Server und Client korrekt. Startet man den v6v4_tcpserver unter einem IPv6-fähigen Betriebssystem, beantwortet er sowohl IPv6- als auch IPv4-Verbindungswünsche. Unterstützt das Betriebssystem IPv6 nicht, funktioniert der Server trotzdem, kann aber nur IPv4-Verbindungswünsche entgegennehmen.

Hier erreicht den Server eine von v4_tcpclient abgesandte Nachricht über IPv4 unter einem IPv6-fähigen Betriebssystem:

su_ai_addr:  pchegering2.nm.informatik.uni-muenchen.de.3682\
             (::ffff:129.187.214.42.3682)

Verbindung von pchegering2.nm.informatik.uni-muenchen.de.3682\
               (::ffff:129.187.214.42.3682)
Mitteilung: test
Beende Verbindung
Die IPv4-Adresse von pchegering2 wird als IPv4-kompatible IPv6-Adresse ausgegeben.

Hier erreicht den Server eine von v6v4_tcpclient abgesandte Nachricht über IPv6:

su_ai_addr:  ipv6-localhost.3936(::1.3936)

Verbindung von ipv6-localhost.3936(::1.3936)
Mitteilung: test
Beende Verbindung


next up previous contents
Next: 3.3.12 Bewertung Up: 3.3 Anwendungsentwicklung Previous: 3.3.10 Kompilieren der Beispiele
Copyright Munich Network Management Team