Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Verbindungsloser Client

&pagelevel(3)&pagelevel

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.