Exemple de programe pe socket

 

TCP/IP

server-tcp.c

 

/* Modulul Server tcp/ip*/

#include <netinet/in.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <stdio.h>

#include <errno.h>

#include <netdb.h>

main(int argc,char ** argv)

{

            unsigned short port;  /*portul client*/

            char buffer[32];

            struct sockaddr_in client,server; /*adresele client server*/

            struct hostent * srvinfo;

            int s,rc,namelen,ns;

            if(argc!=2)

            {

                        printf("Apel: %s port \n",argv[0]);

                        exit(1);

            }

 

            /*Preia numele calculatorului local*/

 

            if(gethostname(buffer,32))

                        perror("Eroare la preluarea numelui serverului");

             printf("nume server : %s \n",buffer);

 

             /*Preia informatiile despre configurarea hostului*/

 

             if (!(srvinfo = gethostbyname(buffer)))

                        perror("Eroare la prel. inform. despre server");

             port=(unsigned short) atoi(argv[1]);

 

             /* Creaza un socket*/

 

             if((s=socket(AF_INET,SOCK_STREAM,0))<0)

             {

                        perror("Eroare la creare socket");

                        exit(3);

             }

 

             /* Asociaza socketului o adresa de server*/

 

             memset(&server,0,sizeof(server));

             server.sin_family=AF_INET;

             server.sin_port=htons(port);

             server.sin_addr.s_addr=inet_addr("193.226.34.61");/*adresa internet locala*/

             if(bind(s,&server,sizeof(server))<0)

             {

                        perror("Eroare la obtinerea adresei");

                        exit(4);

             }

             /* Creaza coada pt cererile de conexiune.Aceasta va

             putea prelua maximum 5 cereri de conexiune de la clienti,

             restul fiind refuzate*/

             if(listen(s,5)!=0)

             {

                        perror("Eroare la obt cozii de cereri");

                        exit(5);

             }

             /*Creaza un descriptor de socket pt comunic. server-client*/

             namelen=sizeof(client);

             if((ns=accept(s,&client,&namelen))==-1)

             {

                        perror("Eroare la acceptarea conexiunii");

                        exit(6);

             }

             /*Receptionarea mesajului de la client*/

             if(recv(ns,buffer,32,0)==-1)

             {

                        perror("Eroare la receptie");

                        exit(7);

             }

             /* Afiseaza mesajul primit de la client*/

             printf("Mesaj receptionat de la client:%s\n",buffer);

             /*Transmite confirmarea clientului*/

             if(send(ns,buffer,strlen(buffer),0)<0)

             {

                        perror("Eroare la transmisie");

                        exit(8);

             }

             endhostent();/*Incheie sesiunea TCP/IP*/

             close(ns);

             close (s);

             exit(0);

    }

 

client-tcp.c

/* Modulul Client tcp/ip*/

#include <stdio.h>

#include <sys/types.h>

#include <netinet/in.h>

#include <sys/socket.h>

#include <errno.h>

#include <netdb.h>

main(int argc,char ** argv)

{

            unsigned short port;  /*portul client*/

            char buffer[32];

            struct sockaddr_in server; /*adresele client server*/

 

            struct hostent * hostnm;

            int s,rc;

            if(argc!=3)

            {

                        printf("Apel: %s hostname port \n",argv[0]);

                        exit(1);

            }

 

            if(!(hostnm=(struct hostent *) gethostbyname(argv[1])))

            {

                        perror("Eroare la preluarea numelui serverului");

                        exit(3);

             }

             port=(unsigned short) atoi(argv[2]);

             strcpy(buffer,"Mesaj transferat prin socket");

 

             server.sin_family=AF_INET;

             server.sin_port=htons(port);

             server.sin_addr.s_addr=inet_addr("193.226.34.61");/*adresa internet locala*/

             if((s=socket(AF_INET,SOCK_STREAM,0))<0)

             {

                        perror("Eroare la creare socket");

                        exit(4);

             }

 

             if(connect(s,&server,sizeof(server))<0)

             {

                        perror("Eroare la obtinerea conexiunii");

                        exit(5);

             }

 

             /*Transmite confirmarea serverului*/

             if(send(s,buffer,strlen(buffer),0)<0)

             {

                        perror("Eroare la transmisie");

                        exit(6);

             }

             /*Confirmare de la server*/

             if(recv(s,buffer,32,0)<0)

             {

                        perror("Eroare la receptie");

                        exit(7);

             }

             close (s);

             exit(0);

    }

 

////////////////////////////////////////////////////////////

s-tcp.c

implicit portul 10.000

 

/* Modulul Server tcp/ip*/

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <stdio.h>

#include <errno.h>

#include <netdb.h>

main(int argc,char ** argv)

{

            unsigned short port;  /*portul client*/

            char buffer[32];

            struct sockaddr_in client,server; /*adresele client server*/

            struct hostent * srvinfo;

            int s,rc,namelen,ns;

            if(argc!=1)

            {

                        printf("Apel: %s port \n",argv[0]);

                        exit(1);

            }

 

            /*Preia numele calculatorului local*/

 

            if(gethostname(buffer,32))

                        perror("Eroare la preluarea numelui serverului");

             printf("nume server : %s \n",buffer);

 

             /*Preia informatiile despre configurarea hostului*/

 

             if (!(srvinfo = gethostbyname(buffer)))

                        perror("Eroare la prel. inform. despre server");

/*         port=(unsigned short) atoi(argv[1]);*/

     port=10000;

 

                         /* Creaza un socket*/

 

              if((s=socket(AF_INET,SOCK_STREAM,0))<0)

              {

                        perror("Eroare la creare socket");

                        exit(3);

              }

 

              /* Asociaza socketului o adresa de server*/

 

              memset(&server,0,sizeof(server));

              server.sin_family=AF_INET;

              server.sin_port= htons(port);

              server.sin_addr.s_addr=inet_addr("193.226.34.61");

          /*adresa internet locala*/

              if(bind(s,&server,sizeof(server))<0)

              {

                        perror("Eroare la obtinerea adresei");

                        exit(4);

              }

 

              /* Creaza coada pt cererile de conexiune.Aceasta va

              putea prelua maximum 5 cereri de conexiune de la clienti,

              restul fiind refuzate*/

          if(listen(s,5)!=0)

                         {

                                    perror("Eroare la obt cozii de cereri");

                                    exit(5);

                         }

 

             /*Creaza un descriptor de socket pt comunic. server-client*/

 

             namelen=sizeof(client);

             if((ns=accept(s,&client,&namelen))==-1)

                         {

                                    perror("Eroare la acceptarea conexiunii");

                                    exit(6);

                         }

 

             /*Receptionarea mesajului de la client*/

 

             if(recv(ns,buffer,32,0)==-1)

                         {

                                    perror("Eroare la receptie");

                                    exit(7);

                         }

 

             /* Afiseaza mesajul primit de la client*/

 

             printf("Mesaj receptionat de la client:%s\n",buffer);

 

             /*Transmite confirmarea clientului*/

 

             if(send(ns,buffer,strlen(buffer),0)<0)

                         {

                                    perror("Eroare la transmisie");

                                    exit(8);

                         }

         endhostent();/* inchide sesiunea client */

             close(ns);

             close (s);

             exit(0);

    }

 

 

c-tcp.c

 

/* Modulul Client tcp/ip*/

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <stdio.h>

#include <errno.h>

#include <netdb.h>

main(int argc,char ** argv)

{

            unsigned short port;  /*portul client*/

            char buffer[32];

            struct sockaddr_in server; /*adresele client server*/

            struct hostent * hostnm;

            int s,rc;

            if(argc!=2)

            {

                        printf("Apel: %s hostname (portul implicit este 10.000) \n",argv[0]);

                        exit(1);

            }

 

            if((hostnm=(struct hostent *) gethostbyname(argv[1])) == NULL)

            {

                        perror("Eroare la preluarea numelui serverului");

                        exit(3);

             }

             port=10000;

             strcpy(buffer,"Mesaj transferat prin socket");

 

             server.sin_family=AF_INET;

             server.sin_port=htons(port);

             server.sin_addr.s_addr=INADDR_ANY;/*adresa internet locala*/

             if((s=socket(AF_INET,SOCK_STREAM,0))<0)

             {

                        perror("Eroare la creare socket");

                        exit(4);

             }

 

             if(connect(s,&server,sizeof(server))<0)

             {

                        perror("Eroare la obtinerea conexiunii");

                        exit(5);

             }

 

             /*Transmite confirmarea serverului*/

             if(send(s,buffer,strlen(buffer),0)<0)

             {

                        perror("Eroare la transmisie");

                        exit(6);

             }

             /*Confirmare de la server*/

             if(recv(s,buffer,32,0)<0)

             {

                        perror("Eroare la receptie");

                        exit(7);

             }

             close (s);

             exit(0);

    }

 

///////////////////////////////////////////////////////

UDP/IP

 

server-udp.c

 

/* modulul server udp */

#include <sys/types.h>

#include <sys/socket.h>

#include <stdio.h>

#include <errno.h>

#include <netdb.h>

#include <netinet/in.h>

 

main()

{

 char buffer[32];

 struct sockaddr_in client,server;

 int s,rc,namelen;

 

 if((s = socket(AF_INET,SOCK_DGRAM,0)) < 0)

  {

   perror("Eroare la creare socket !");

   exit(1);

  }

 printf("S-a creat socket-ul....\n");

 

 

 memset(&server,0,sizeof(server));

 server.sin_family = AF_INET;

 server.sin_port = htons(15200);

 server.sin_addr.s_addr = inet_addr("193.226.34.61");

 

 if(bind(s,&server,sizeof(server)) < 0)

  {

   perror("Eroare la obtinerea adresei");

   exit(2);

  }

 printf("S-a obtinut o adresa ....\n");

 

/* namelen = sizeof(server);

 if(getsockname(s, &server,&namelen))

  {

   perror("Eroare la determinarea portului !");

   exit(3);

  }

  printf("S-a determinat portul....\n");

 */

 

  namelen = sizeof(client);

  if (recvfrom ( s, buffer, 32, 0, &client, sizeof(client))< 0 )

    {

     perror("Eroare la receptie !");

     exit(4);

    }

  printf("S-a receptionat mesajul....\n");

 

  printf("Mesaj receptionat de la client : %s \n",buffer);

  printf("Parametrii: \n nume domeniu : %s \nport : %d \nadresa Internet : %s\n",(server.sin_family == AF_INET ?

 "AF_INET" : "AF_UNIX"),ntohs(server.sin_port),

inet_ntoa(server.sin_addr));

 

 endhostent();

 /*inchide sesiunea UDP/IP*/

 

 close(s);

 exit(0);

}

 

 

client-udp.c

 

/* modulul client */

# include <sys/types.h>

# include <sys/socket.h>

# include <stdio.h>

# include <errno.h>

# include <netinet/in.h>

# include <netdb.h>

 

main(int argc,char **argv)

{

 unsigned short port;

 char buffer[32];

 struct sockaddr_in server;

 int s,rc;

 if(argc != 2)

  {

   printf("apel : %s serverport 15200 (implicit) \n",argv[0]);

   exit(1);

  }

 port=(unsigned short)atoi(argv[1]);

 strcpy(buffer,"s-a trimis mesaj prin socket");

 server.sin_family = AF_INET;

 server.sin_port = htons(port);

 server.sin_addr.s_addr = inet_addr("193.226.34.61");

 if((s = socket(AF_INET,SOCK_DGRAM,0)) < 0)

  {

   perror("Eroare la creare socket !");

   exit(2);

  }

 if(sendto(s,buffer,strlen(buffer)+1,0,&server,sizeof(server)) < 0 )

  {

   perror("Eroare la transmisie");

   exit(3);

  }

 close(s);

 exit(0);

}

 

//////////////////////////////////////////////////////
s-udp.c

(implicit portul 15.000)

/*UDPSERVER.C */

 

#include "header.h"

main()

{

   char mesaj_de_la_client[50];

   struct sockaddr_in server;

    struct sockaddr_in client;

   int s;

 

   if ((s=socket(AF_INET,SOCK_DGRAM,0))<0)

             {perror("Eroare la creare socket"); exit(1);}

   memset(&server,0,sizeof(server));

   server.sin_family=AF_INET;

   server.sin_port=htons(15000);

   server.sin_addr.s_addr=INADDR_ANY;

   if(bind(s,&server,sizeof(server))<0)

             {perror("Eroare la alocare de adresa "); exit(2);}

   if(recvfrom(s,mesaj_de_la_client,50,0, &client,sizeof(client))<0)

             {perror("Eroare de receptie "); exit(3);}

   printf("Mesajul receptionat de la client : %s\n",mesaj_de_la_client);

endhostent();

close(s);

exit(4);

}

 

c-udp.c

/*UDPCLIENT.C */

 

#include "header.h"

 

main()

 

{

char mesajul_clientului[50];

struct sockaddr_in server;

int s;

strcpy(mesajul_clientului,"Mesaj transmis cu protocol UDP ");

  server.sin_family = AF_INET;

  server.sin_port = htons(15000);

  server.sin_addr.s_addr = inet_addr("193.226.34.61");

  if((s=socket(AF_INET,SOCK_DGRAM,0))<0)

         {perror(" Eroare la creare socket ");

          exit(1);}

  if(sendto(s,mesajul_clientului,strlen(mesajul_clientului)+1,0,&server,sizeof(server))<0)

         {perror("Eroare la transmiterea mesajului clientului");

          exit(2);}

  close(s);

  exit(0);

}

 

 

header.h

 

#include<stdio.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netdb.h>

#include <sys/socketvar.h>

#include <netinet/in.h>

#include <sys/ioctl.h>

#include <curses.h>

#include <errno.h>