Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Beispiel zur Adressumwandlung

&pagelevel(3)&pagelevel

Folgender Client-Programmcode demonstriert die Adressumwandlung.

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
int main(int argc, char **argv)
{
      struct sockaddr_in server;
      struct servent *sp;
      struct hostent *hp;
      int s;
      sp = getservbyname("telnet", "tcp");
      if (sp == NULL) {
              fprintf(stderr, "telnet/tcp: unknown service\n");
              exit(1);
      }
      hp = gethostbyname(argv[1]);
      if (hp == NULL) {
              fprintf(stderr, "%s: unknown host\n", argv[1]);
              exit(2);
      }
      memset((char *)&server, 0, sizeof server);
      memcpy((char *)&server.sin_addr, hp->h_addr, hp->h_length);
      server.sin_family = hp->h_addrtype;
      server.sin_port = sp->s_port;
      s = socket(AF_INET, SOCK_STREAM, 0);
      if (s < 0) {
              perror("socket");
              exit(3);
      }
      /* Connect does the bind for us */
      if (connect(s, (struct sockaddr *)&server, sizeof server) < 0) {
              perror("connect");
              exit(5);
      }
      exit(0);
}

Das Beispielprogramm ist nur für die Kommunikationsdomäne AF_INET dargestellt.

Es gilt auch für die Domäne AF_INET6, wenn Sie folgende Änderungen durchführen:

  • server ist vom Typ struct sockaddr_in6

  • struct sockaddr_in6 wird mit den Socket-Funktionen getaddrinfo oder getipnodebyname versorgt (nicht mit gethostbyname wie in AF_INET)

Eine detaillierte Beschreibung dazu finden Sie in "Socket-Adressierung" und "Socket erzeugen".