Beispiele


Server
Client
Socketpair

Server

/*Einbinden von Headerdateien*/
#include <sys/types.h >
#include <sys/socket.h>
#include <errno.h>

/*Server Port definieren*/
#define SERVER_PORT 6666

int main()
{
   /*Socketadresse fuer die Kommunikation vom Server zumm Client*/
   struct sockaddr_in serveraddress, clientaddress;

   /*Socketdeskriptoren*/
   int socketnumber,socketchild;

   /*Puffer fuer Botschaft*/
   char buffer[1024];

   /*Adresse belegen.*/
   serveraddress.sin_family=AF_INET;
   serveraddress.sin_addr.s_addr=htonl(INADDR_ANY);
   serveraddress.sin_port =htons(SERVER_PORT);

   /*Erzeugen einer Socket*/
   socketnumber=socket(AF_INET, SOCK_STREAM, 0);

   /*Fehlerabfrage*/
   if(socketnumber<0)
   {
      printf("Socket konnte nicht erzeugt werden.\n");
      printf("Fehler : %i\n",errno);
      exit(-1);
   }

   /*Socket an die Adresse binden*/
   if(bind(socketnumber, (struct sockaddr *) &serveraddress, lengthserveraddress))<);
   {
      printf("Adresse konnte nicht an socket gebunden werden.\n");
      printf("Fehler : %i\n",errno);
      exit(-2);
   }

   /*Erzeugen einer Warteschlange die max. eine noch nicht akeptierte Anfrage speichert.*/
   listen(socketnumber,1);

   while(1)
   {
     /*Akzeptiert einen Verbindungaufbauwunsch*/ 
      socketchild=accept(socketnumber,(struct sockadrr *) &clientaddress,lengthclientaddress);
      if(socketchild<0)
      {
         printf("Kindsocket konnte nicht erzeugt werden.\n");
         printf("Fehler : %i\n",errno);
         exit(-3);
      }
      else
      {
         /*Erzeugt ein Kindprozess, das die Anfrage bearbeitet*/
         switch(fork())
         {
                      /*Fehlerabfrage*/
            case -1 : printf("Kindprozess konnte nicht erzeugt werden.\n");
                      break ;

                     /*Empfaengt Daten und speichert sie im Puffer.*/
            case  0 : recv(socketchild,buffer,sizeof(buffer),0);
                     if(strlen(buffer)≶0)
                     strcpy(buffer,"daten empfangen");
                     else
                     strcpy(buffer,"daten nicht empfangen");
 
                     /*Sendet Daten aus Puffer.*/ 
                     send(socketchild,buffer,sizeof(buffer),0);
                     exit(0);
  
                     /*Vaterprozess wartet auf Terminierung des Sohnprozesses zur vermeindung
                     von Zombieprozessen*/
            default : wait();
         }
      }
   }
}

Client

/*Einbinden von Headerdateien*/
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>

/*Server Port definieren*/
#define SERVER_PORT 6666

/*Server IP definieren*/
#define SERVER_ADDRESS "139.6.17.19"

void main()
{
   /*Serveradresse*/
   struct sockaddr_in serverAdress;
   
   /*Socketdeskriptor*/
   int socketnumber;

   /*Puffer fuer Botschaft*/
   char buffer[1024];

   /*Adresse belegen*/
   serverAdress.sin_family=AF_INET;
   serverAdress.sin_addr.s_addr=inet_addr(SERVER_ADDRESS);
   serverAdress.sin_port =htons(SERVER_PORT);

   /*Socket erzeugen*/
   socketnumber=socket(AF_INET, SOCK_STREAM, 0);
   if(socketnumber<0)
   {
      printf("Socket konnte nicht erzeugt werden.\n");
      printf("Fehler : %i\n",errno);
   }
   else
   { 
       /*Groesse der Struktur ermitteln*/
       lengthserveraddress = sizeof(serveraddress);

       /*Verbindet lokale Socket mit Server Socket*/
       if(connect(socketnumber,(struct sockaddr *) &serveraddress, lengthserveraddress)<0)
      {
         printf("Connet konnte nicht ausgefuehrt werden.\n");
         printf("Fehler : %i\n",errno);
      }
      else
      {
         strcpy(buffer,"Dies ist ein Test");
         write(socketnumber,buffer,sizeof(buffer));
         read(socketnumber,buffer,sizeof(buffer));
         printf("Die Nachricht vom Server ist : %s :\n",buffer);
      }
   /*Socket schlissen*/ 
   close(socketnumber);
   }
}


Socketpair

/*Einbinden von Headerdateien*/
#include <sys/socket.h>
#include <stdio.h>
#include <errno.h>

int main()
{
   int sockpair[2];
   char buffer[10];

   /*Eine Socketpair erstellen*/
   if(socketpair(AF_UNIX, SOCK_STREAM, 0, sockpair)<0)
   {
      fprintf(STDERR_FILENO,"Socketpair konnte nicht initialisiert werden");
      return -1;
   }
   switch(fork())
   {
      case -1 : fprintf(STDERR_FILENO,"Kindprozess konnte nicht erzeugt werden.\n");
                break ;

                /*Empfangssocketpair schliessen*/
      case  0 : close(sockpair[0]);

                /*Nachricht senden*/
                send(sockpair[1],"Hallo",sizeof("Hallo"),0);

                /*Sendesocket schliessen*/
                close(sockpair[1]);

                /*Prozesss terminieren*/
                exit(0);
                break;

                /*Sendesocketpair schliessen*/
      default  : close(sockpair[1]);

                /*Daten empfangen*/
                revc(sockpair[0],buffer,sizeof(buffer,0);
                printf("Nachricht : %s\n",buffer);

                /*Empfangssocketpair schliessen*/
                close(sockpair[0]);

                /*Vaterprozess wartet auf Terminierung des Sohnprozesses zur vermeindung
                von Zombieprozessen*/
                wait();
   }
}
back