使用socket发送组播包

[复制链接]
 楼主| keer_zu 发表于 2023-11-22 10:33 | 显示全部楼层 |阅读模式



代码如下:
  1. #include "fun_interface.h"
  2. #include <unistd.h>
  3. #include <string>
  4. struct in_addr localInterface;
  5. struct sockaddr_in groupSock;
  6. int sd;
  7. char databuf[1024] = "Multicast test message lol!";

  8. int datalen = sizeof(databuf);

  9. typedef struct {
  10.     std::string dip;
  11.     int sock;
  12.     struct sockaddr_in gsock;
  13. } test_item_t;

  14. test_item_t sock_items[] = {
  15. {
  16.     .dip = "225.0.0.128"
  17. },
  18. {
  19.     .dip = "225.0.0.120"
  20. },
  21. {
  22.     .dip = "225.0.0.111"
  23. },
  24. {
  25.     .dip = "225.0.0.110"
  26. },
  27. {
  28.     .dip = "239.202.0.11"
  29. },
  30. {
  31.     .dip = "239.202.255.251"
  32. }
  33. };

  34. int init_sock()
  35. {
  36.     int sd;
  37.     int items_size = sizeof(sock_items)/sizeof(test_item_t);
  38.     printf("== size:%d\n",items_size);
  39.     for(int i = 0;i < items_size;i ++) {
  40.         sd = socket(AF_INET, SOCK_DGRAM, 0);
  41.         if(sd < 0) {
  42.             perror("Opening datagram socket error");
  43.             return -1;
  44.         } else {
  45.             printf("open socket ....ok\n");
  46.             sock_items[i].sock = sd;
  47.         }

  48.         memset((char *) &sock_items[i].gsock, 0, sizeof(sock_items[i].gsock));
  49.         sock_items[i].gsock.sin_family = AF_INET;
  50.         //groupSock.sin_addr.s_addr = inet_addr("226.1.1.1");
  51.         sock_items[i].gsock.sin_addr.s_addr = inet_addr(sock_items[i].dip.c_str());
  52.         sock_items[i].gsock.sin_port = htons(4321);

  53.         localInterface.s_addr = inet_addr("192.168.1.12");
  54.         //localInterface.s_addr = inet_addr("172.16.16.90");

  55.         if(setsockopt(sd, IPPROTO_IP, IP_MULTICAST_IF, (char *)&localInterface, sizeof(localInterface)) < 0){
  56.             perror("Setting local interface error");
  57.             return -1;
  58.         }else
  59.             printf("Setting the local interface...OK\n");
  60.     }

  61.     return 0;
  62. }

  63. int main()
  64. {
  65.     int items_size = sizeof(sock_items)/sizeof(test_item_t);
  66.    
  67.     if(init_sock() != 0) {
  68.         exit(1);
  69.     }
  70.     /* Send a message to the multicast group specified by the*/
  71.     /* groupSock sockaddr structure. */
  72.     /*int datalen = 1024;*/
  73.     for(int i = 0;i < 100;i ++) {
  74.         for(int j = 0;j < items_size;j ++ ) {
  75.             if(sendto(sock_items[j].sock, databuf, datalen, 0, (struct sockaddr*)&sock_items[j].gsock, sizeof(sock_items[j].gsock)) < 0) {
  76.                 perror("Sending datagram message error");
  77.             } else
  78.                 printf("Sending datagram message...OK\n");
  79.         }
  80.         sleep(3);
  81.     }
  82.    
  83.     return 0;
  84. }


您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1478

主题

12915

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1478

主题

12915

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部