Loading...
Select Version
&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".