Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.32 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <netinet/in.h>
  6. #include <string.h>
  7. #define exit_on_error(s,m) if (s < 0) { perror(m); exit(1); }
  8. #define MAX_BUFFER 512
  9.  
  10. int main(int argc, char* argv[])
  11. {
  12. int sock, length, fromlen, r, send_sock, sendlen, V = 1, n; //int n declarado
  13. struct sockaddr_in SERVER_ADDR;
  14. struct sockaddr_in FROM_ADDR;
  15. struct sockaddr_in SENDTO_ADDR;
  16. //struct sockaddr_in LOCALMENTE_addr;
  17. char buf[MAX_BUFFER];
  18.  
  19. //verifica argumentos
  20. if (argc != 5)
  21. {
  22. printf("USAGE: %s <a.porto> <ip_broadcast> <c.porto> <b.porto>n",argv[0]);
  23. exit(1);
  24. }
  25. //cria socket UDP
  26. sock = socket(AF_INET, SOCK_DGRAM, 0);
  27. if(sock < 0) printf("SOCKET");
  28. length = sizeof(SERVER_ADDR);
  29. bzero(&SERVER_ADDR, length);
  30. SERVER_ADDR.sin_family = AF_INET;
  31. SERVER_ADDR.sin_addr.s_addr = INADDR_ANY;
  32. SERVER_ADDR.sin_port = htons(atoi(argv[1]));
  33.  
  34. setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &V, sizeof(V));
  35. sendlen = sizeof(SENDTO_ADDR);
  36. bzero(&SENDTO_ADDR, sendlen);
  37. SENDTO_ADDR.sin_family = AF_INET;
  38. SENDTO_ADDR.sin_addr.s_addr = inet_addr(argv[2]);
  39. SENDTO_ADDR.sin_port = htons(atoi(argv[3]));
  40.  
  41. if(bind(sock, (struct sockaddr *)&SERVER_ADDR,length) < 0) printf("BIND: ");
  42.  
  43. fromlen = sizeof(struct sockaddr_in);
  44.  
  45. while(1)
  46. {
  47.  
  48. printf("Wait for the next message...!n");
  49. bzero(&buf, MAX_BUFFER);
  50. n = recvfrom(sock,buf,MAX_BUFFER,0,(struct sockaddr *) &FROM_ADDR, &fromlen);
  51.  
  52.  
  53.  
  54. if (strstr(buf,"Confirma")){
  55. printf("Mensagem recebida: [%s], bytes recebidos: [%d]n",buf,n);
  56.  
  57. SENDTO_ADDR.sin_addr.s_addr = inet_addr(argv[2]);
  58. SENDTO_ADDR.sin_port = htons(atoi(argv[4]));
  59. n = sendto (sock, buf,MAX_BUFFER,0,(struct sockaddr *) &SENDTO_ADDR, sendlen);
  60.  
  61.  
  62.  
  63. }
  64. else{
  65. printf("Mensagem recebida: [%s], bytes recebidos: [%d]n",buf,n);
  66. SENDTO_ADDR.sin_addr.s_addr = inet_addr(argv[2]);
  67. SENDTO_ADDR.sin_port = htons(atoi(argv[3]));
  68. n = sendto (sock, buf,MAX_BUFFER,0,(struct sockaddr *) &SENDTO_ADDR, sendlen);
  69.  
  70.  
  71. SENDTO_ADDR.sin_addr.s_addr = inet_addr(argv[2]);
  72. SENDTO_ADDR.sin_port = htons(atoi(argv[4]));
  73. strcpy(buf," Confirmado interlocutor. ");
  74. n = sendto (sock, buf,MAX_BUFFER,0,(struct sockaddr *) &SENDTO_ADDR, sendlen);
  75. }
  76.  
  77. }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement