Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. /*Compilar - gcc servidorudp.c -o servidorudp
  2.   Executar - ./servidorudp
  3. */
  4.  
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <netinet/in.h>
  8. #include <arpa/inet.h>
  9. #include <netdb.h>
  10. #include <stdio.h>
  11. #include <unistd.h> /* close() */
  12. #include <string.h> /* memset() */
  13. #include <stdlib.h>
  14.  
  15. #define LOCAL_SERVER_PORT 1500
  16. #define MAX_MSG 100
  17.  
  18. int main(int argc, char *argv[]) {
  19.  
  20.   int sd, rc, n, cliLen;
  21.   struct sockaddr_in cliAddr, servAddr;
  22.   char msg[MAX_MSG];
  23.  
  24.   sd=socket(AF_INET, SOCK_DGRAM, 0);
  25.   if(sd<0) {
  26.     printf("%s: cannot open socket \n",argv[0]);
  27.     exit(1);
  28.   }
  29.  
  30.   servAddr.sin_family = AF_INET;
  31.   servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
  32.   servAddr.sin_port = htons(LOCAL_SERVER_PORT);
  33.   rc = bind (sd, (struct sockaddr *) &servAddr,sizeof(servAddr));
  34.   if(rc<0) {
  35.     printf("%s: cannot bind port number %d \n",
  36.        argv[0], LOCAL_SERVER_PORT);
  37.     exit(1);
  38.   }
  39.  
  40.   printf("%s: waiting for data on port UDP %u\n",
  41.        argv[0],LOCAL_SERVER_PORT);
  42.  
  43.   while(1) {
  44.  
  45.     memset(msg,0x0,MAX_MSG);
  46.  
  47.  
  48.     cliLen = sizeof(cliAddr);
  49.     n = recvfrom(sd, msg, MAX_MSG, 0,
  50.          (struct sockaddr *) &cliAddr, &cliLen);
  51.  
  52.     if(n<0) {
  53.       printf("%s: cannot receive data \n",argv[0]);
  54.       continue;
  55.     }
  56.  
  57.      FILE *arq;
  58.      char nome_arquivo[20];
  59.      strcpy(nome_arquivo, "arquivosaida.txt");
  60.      arq = fopen(nome_arquivo, "wt");
  61.      if(arq == NULL)
  62.      {
  63.             printf("Nao e possivel iniciar o arquivo\n");
  64.             exit(1);
  65.      }
  66.      fprintf(arq,msg);
  67.      fclose(arq);
  68.  
  69.      int i;
  70.      char msgzinha[100];
  71.      memcpy(msgzinha, "Ola cliente, sua mensagem foi recebida", 100);
  72.  
  73.      rc = sendto(sd, msgzinha, strlen(msgzinha)+1, 0,
  74.       (struct sockaddr *) &cliAddr,
  75.  
  76.       sizeof(cliAddr));
  77.        if(rc<0) {
  78.          printf("%s: cannot send data %d \n",argv[0],i-1);
  79.          close(sd);
  80.          exit(1);
  81.        }
  82.        break;
  83.  
  84.  
  85.    }
  86. return 0;
  87.  
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement