In diesem Programmbeispiel verwendet der Client die folgenden Funktionen der Socket- bzw. POSIX-Schnittstelle:
socket(): Socket erzeugen
gethostbyname(): Rechner-Eintrag abfragen
sendto(): Nachricht an einen Socket senden
close(): Socket schließen
Beispiel: Verbindungsloser Client
#include <stdio.h>
#include <sys/socket.h>
#include <ioctl.h>
#include <signal.h>
#include <netinet/in.h>
#include <netdb.h>
#define DATA " The sea is calm, the tide is full ..."
#define ERROR_EXIT(M) perror(M); exit(1)
#define TESTPORT 2222
int main(int argc, char **argv)
{
int sock;
struct sockaddr_in to;
struct hostent *hp;
/* Erzeugen des Client-Sockets, von den gesendet werden soll. */
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
ERROR_EXIT("socket");
}
/* Konstruieren des Namens des Server-Sockets, an den gesendet werden soll. */
if ((hp =gethostbyname(argv[1])) == NULL) {
fprintf(stderr, "%s: unknown host\n", argv[1]);
exit(1);
}
memcpy((char *)&to.sin_addr, (char *)hp->h_addr,hp->h_length);
to.sin_family = AF_INET;
to.sin_port = htons(TESTPORT);
/* Nachricht senden. */
if (sendto(sock, DATA, sizeof DATA, 0, (struct sockaddr *)&to, sizeof to) < 0) {
ERROR_EXIT("sendto");
}
close(sock);
return 0;
}
Im Programm werden folgende Arbeitsschritte durchgeführt:
Die Funktion socket() erzeugt einen Kommunikationsendpunkt (Client-Socket) und den zugehörigen Deskriptor.
Mit gethostbyname() wird die IP-Adresse des Servers ermittelt; der Rechnername wird als Parameter beim Programmaufruf übergeben.
Danach wird die Server-Adress-Struktur initialisiert.
Die Funktion sendto() sendet vom Client-Socket ein Datagramm an den Server-Socket. Sie liefert die Anzahl der übertragenen Zeichen zurück.
Die Funktion close() schließt den Client-Socket.
Das Beispielprogramm ist nur für die Kommunikationsdomäne AF_INET gültig. Wenn es gemäß den Angaben in "Socket- Adressierung" und "Socket erzeugen" geändert wird, gilt es auch für die Domäne AF_INET6. Beachten Sie auch, dass Sie die Socket-Funktionen getaddrinfo() oder getipnodebyname() anstelle von gethostbyname() verwenden.