Advertisement
Guest User

revision exam TP

a guest
Dec 8th, 2019
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.11 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <netinet/in.h>
  4. #include <sys/socket.h>
  5. #include <sys/types.h>
  6. #include <arpa/inet.h>
  7. #include <string.h>
  8. #include <unistd.h>
  9. #include <sys/wait.h>
  10. #include <signal.h>
  11.  
  12. void sigchild_handler(int s){
  13.   while(wait(NULL)>0);
  14. }
  15.  
  16. int main(int argc, char *argv[]){
  17.   printf("Nom du programme est: %s\n",argv[0]);
  18.   // ------------
  19.  
  20.   // Déclarations
  21.   int sock;
  22.   int b;
  23.   int l;
  24.   int s;
  25.   int clientsock;
  26.   int f;
  27.   int ss;
  28.   int r;
  29.   int yes=1;
  30.   struct sockaddr_in server,client;
  31.   socklen_t size;
  32.   size = sizeof(struct sockaddr_in);
  33.   char msg[1000];
  34.   struct sigaction sa;
  35.  
  36.   // 1: Creation du socket;
  37.   sock = socket(AF_INET, SOCK_STREAM, 0);
  38.   if(sock<0){
  39.     printf("Erreur socket!\n");
  40.     exit(1);
  41.   }
  42.   printf("[+] socket crée.\n");
  43.  
  44.   // Modification des options de socket;
  45.   ss = setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, &yes, sizeof(int));
  46.   if(ss!=0){
  47.     printf("Errer setsockopt!\n");
  48.     exit(1);
  49.   }
  50.  
  51.   printf("[+] Option socket établie.\n");
  52.  
  53.   // 2: Parametrage du server;
  54.   server.sin_family = AF_INET;
  55.   server.sin_port = htons(6000);
  56.   server.sin_addr.s_addr = INADDR_ANY; // inet_addr("0.0.0.0");
  57.   memset(&(server.sin_zero), '\0', 8);
  58.  
  59.  
  60.   // Parametrage de structure de signal
  61.   sa.sa_handler = sigchild_handler;
  62.   sigemptyset(&sa.sa_mask);
  63.   sa.sa_flags = SA_RESTART;
  64.   if(sigaction(SIGCHLD, &sa, NULL)==-1){
  65.     printf("Erreur signal!\n");
  66.     exit(1);
  67.   }
  68.  
  69.   // 3: Bind = socket <=== @ip_port(server)
  70.   b = bind(sock, (struct sockaddr *)&server, size);
  71.   if(b<0){
  72.     printf("Erreur bind!\n");
  73.     exit(1);
  74.   }
  75.   printf("[+] Bind terminé.\n");
  76.   printf("[+] Listening...\n");
  77.   // 4: Listen
  78.   l = listen(sock, 5);
  79.   if(l<0){
  80.     printf("Erreur listen!\n");
  81.     exit(1);
  82.   }
  83.  
  84.   // 5: fork()
  85.   while(1){
  86.  
  87.     if( (clientsock = accept(sock, (struct sockaddr *)&client, &size)) < 0){
  88.       printf("Erreur accept!\n");
  89.       continue;
  90.     }
  91.       printf("Cnx recu!\n");
  92.       if(fork()==0){ // p fils crée.
  93.         close(sock);
  94.  
  95.         char nomclient[100];
  96.         recv(clientsock, nomclient, sizeof(nomclient), 0);
  97.         printf("[+] client %s connecte.\n",nomclient);
  98.  
  99.         printf("[!] Waiting for message...\n\n");
  100.         while((r=recv(clientsock, msg, sizeof(msg),0))>0){
  101.         printf("[%s]: %s\n",nomclient,msg);
  102.         printf("[SERVER->%s]: ",nomclient);
  103.         scanf("%s",msg);
  104.           if((s=send(clientsock, msg, sizeof(msg),0))<0){
  105.             printf("Erreur lors de l'envoie\n");
  106.             exit(1);
  107.           }
  108.         }
  109.  
  110.  
  111.         close(clientsock);
  112.         exit(0);
  113.       }
  114.     close(clientsock);
  115.   } // while
  116.  
  117.  
  118.  
  119. }
  120.  
  121. //---------------------------- client ------------------------
  122. #include <stdio.h>
  123. #include <stdlib.h>
  124. #include <netinet/in.h>
  125. #include <sys/socket.h>
  126. #include <sys/types.h>
  127. #include <arpa/inet.h>
  128. #include <string.h>
  129.  
  130. int main(int argc, char *argv[]){
  131.  
  132.   // Déclaration
  133.   int sock;
  134.   int c;
  135.   int r;
  136.   int s;
  137.   struct sockaddr_in server;
  138.   char msg[1000];
  139.  
  140.  
  141.   // 1: Creation du socket
  142.   sock = socket(AF_INET, SOCK_STREAM, 0);
  143.   if(sock<0){
  144.     printf("Erreur socket!\n");
  145.     exit(1);
  146.   }
  147.   printf("[+] socket crée.\n");
  148.  
  149.   // 2: Paramétrage du server à connecter
  150.   server.sin_family = AF_INET;
  151.   server.sin_port = htons(6000);
  152.   server.sin_addr.s_addr = inet_addr("127.0.0.1");
  153.   // Ou bien: inet_pton(AF_INET, "127.0.0.1", &(server.sin_addr));
  154.  
  155.  
  156.   // 3: Connexion au server
  157.   c = connect(sock, (struct sockaddr *)&server, sizeof(server));
  158.   if(c<0){
  159.     printf("Erreur connect!\n");
  160.     exit(1);
  161.   }
  162.  
  163.   printf("[+] Connexion établie.\n");
  164.  
  165.     send(sock, argv[1], sizeof(argv[1]), 0);
  166.  
  167.  
  168.     printf("[%s]: ",argv[1]);
  169.     scanf("%s",msg);
  170.     send(sock,msg,sizeof(msg),0);
  171.  
  172.     printf("[!] Waiting for message...\n\n");
  173.     while((r=recv(sock, msg, sizeof(msg),0))>0){
  174.         printf("[SERVER]: %s\n",msg);
  175.         printf("[%s]",argv[1]);
  176.         scanf("%s",msg);
  177.         if((s=send(sock,msg,sizeof(msg),0))<0){
  178.             printf("Erreur lors de l'envoie\n");
  179.             exit(1);
  180.         }
  181.     }
  182.  
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement