Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Beispiele für eine verbindungslose Kommunikation

&pagelevel(5)&pagelevel

Die beiden folgenden Programmbeispiele zeigen, wie bei verbindungsloser Kommunikation Datagramme empfangen und gesendet werden.  

Beispiel 1 : Datagramme empfangen

#include <sys.types.h>
#include <sys.socket.h>
#include <netinet.in.h>
#include <stdio.h>
#define TESTPORT 2222
   
/*
 * Die Include-Datei <netinet.in.h> deklariert sockaddr_in wie folgt:
 *
 * struct sockaddr_in {
 *    short   sin_family;
 *    u_short sin_port;
 *    struct in_addr sin_addr;
 *    char    sin_zero[8];
 * };
 *
 * Dieses Programm erzeugt einen Socket, ordnet ihm einen Namen zu 
 * und liest dann von dem Socket.
 */
main()
{
      int sock, length, peerlen;
      struct sockaddr_in name, peer;
      char buf[1024];
   
     /* Erzeugen des Sockets, von dem gelesen werden soll. */
      sock = socket(AF_INET, SOCK_DGRAM, 0);
      if (sock < 0) {
              perror("opening datagram socket");
              exit(1);
      }
   
      /* Dem Socket unter Verwendung von Wildcards einen Namen zuordnen */
      name.sin_family = AF_INET;
      name.sin_addr.s_addr = INADDR_ANY;
      name.sin_port = htons(TESTPORT);
   
      if (bind(sock, &name, sizeof name ) < 0) {
              perror("binding datagram socket");
              exit(1);
      }
  
       /* Lesen von dem Socket. */
       peerlen=sizeof peer;
       if (recvfrom(sock, buf, 1024, &peer, &peerlen) < 0)
               perror("receiving datagram packet");
       else 
       printf("-->%s\n", buf);
       soc_close(sock);
       exit(0);
}

 Beispiel 2: Datagramme senden

#include <sys.types.h>
#include <sys.socket.h>
#include <netinet.in.h>
#include <netdb.h> 
#include <stdio.h>
#define DATA "The sea is calm, the tide is full . . ."
   
/*
 * Dieses Programm sendet ein Datagramm an einen Empfänger, dessen Name über
 * die Argumente in der Kommandozeile übergeben wird. 
 */
main(argc, argv)
      int argc;
      char *argv[];
{
      int sock;
      struct sockaddr_in name;
      struct hostent *hp; 
      /* Socket erzeugen, über den gesendet werden soll */
      sock = socket(AF_INET, SOCK_DGRAM, 0);
      if (sock < 0) {
              perror("opening datagram socket");
              exit(1);
      }
   
      /*
       * Den Namen des Sockets, an den gesendet werden soll, ohne die 
       * Verwendung von Wildcards konstruieren. gethostbyname() liefert 
       * eine Struktur, die die Internet-Adresse des angegebenen Rechners 
       * enthält. Die Portnummer wird aus der Kommandozeile 
       * übernommen.
       */
   
      hp = gethostbyname(argv[1]);
      if (hp == 0) {
              fprintf(stderr, "%s: unknown host\n", argv[1]);
              exit(2);
      }
      memcpy( (char *)&name.sin_addr, (char *)hp->h_addr,
        hp->h_length);
      name.sin_family = AF_INET;
      name.sin_port = htons(atoi(argv[2]));
  
      /* Nachricht senden. */
  
      if (sendto(sock, DATA, sizeof DATA , 0, &name, sizeof name) < 0)
              perror("sending datagram message");
      soc_close(sock);
      exit(0);
}