• TCP/IP 组播的发送和接收


       1:  /*
       2:   * =====================================================================================
       3:   *
       4:   *       Filename:  client.c
       5:   *
       6:   *    Description:  
       7:   *
       8:   *        Version:  1.0
       9:   *        Created:  03/14/2013 01:48:12 PM
      10:   *       Revision:  none
      11:   *       Compiler:  gcc
      12:   *
      13:   *         Author:  YOUR NAME (), 
      14:   *        Company:  
      15:   *
      16:   * =====================================================================================
      17:   */
      18:   
      19:  #include <stdio.h>
      20:  #include <sys/socket.h>
      21:  #include <netinet/in.h>
      22:  #include <arpa/inet.h>
      23:  #include <stdlib.h>
      24:  #include <strings.h>
      25:  #include <string.h>
      26:  #include <unistd.h>
      27:   
      28:  #define N 256
      29:   
      30:  typedef struct sockaddr SA;
      31:   
      32:  int main(int argc, char *argv[])
      33:  {
      34:   
      35:      int sockfd;
      36:      int on = 1;
      37:      socklen_t optlen = sizeof(on);
      38:      struct sockaddr_in broad_addr;
      39:      char buffer[N] = {"pengdonglin\n"};
      40:   
      41:   
      42:      if((sockfd = socket(PF_INET, SOCK_DGRAM, 0) ) < 0)
      43:      {
      44:          perror("fail to socket");
      45:          exit(-1);
      46:      }
      47:      
      48:   
      49:      bzero(&broad_addr, sizeof(struct sockaddr_in));
      50:   
      51:      broad_addr.sin_family = PF_INET;
      52:      broad_addr.sin_port = htons(atoi(argv[2]));
      53:      broad_addr.sin_addr.s_addr = inet_addr(argv[1]);
      54:   
      55:      while(1)
      56:      {
      57:          sendto(sockfd,buffer, N, 0, (SA *)&broad_addr, sizeof(broad_addr)); 
      58:          sleep(1);
      59:      }
      60:   
      61:      return 0;
      62:  }

    接收端:

       1:  /*
       2:   * =====================================================================================
       3:   *
       4:   *       Filename:  client.c
       5:   *
       6:   *    Description:  
       7:   *
       8:   *        Version:  1.0
       9:   *        Created:  03/14/2013 01:48:12 PM
      10:   *       Revision:  none
      11:   *       Compiler:  gcc
      12:   *
      13:   *         Author:  YOUR NAME (), 
      14:   *        Company:  
      15:   *
      16:   * =====================================================================================
      17:   */
      18:   
      19:  #include <stdio.h>
      20:  #include <sys/socket.h>
      21:  #include <netinet/in.h>
      22:  #include <arpa/inet.h>
      23:  #include <stdlib.h>
      24:  #include <strings.h>
      25:  #include <string.h>
      26:  #include <unistd.h>
      27:   
      28:  #define N 256
      29:   
      30:  typedef struct sockaddr SA;
      31:   
      32:  int main(int argc, char *argv[])
      33:  {
      34:   
      35:      int sockfd;
      36:      struct sockaddr_in broad_addr, peeraddr;
      37:      socklen_t peerlen = sizeof(peeraddr);
      38:      char buffer[N];
      39:      struct ip_mreq mreq;
      40:   
      41:   
      42:      if((sockfd = socket(PF_INET, SOCK_DGRAM, 0) ) < 0)
      43:      {
      44:          perror("fail to socket");
      45:          exit(-1);
      46:      }
      47:      
      48:      bzero(&mreq, sizeof(mreq));
      49:      mreq.imr_multiaddr.s_addr = inet_addr("224.10.10.1");
      50:      mreq.imr_interface.s_addr = htonl(INADDR_ANY);
      51:      setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
      52:   
      53:   
      54:      bzero(&broad_addr, sizeof(struct sockaddr_in));
      55:      broad_addr.sin_family = PF_INET;
      56:      broad_addr.sin_port = htons(atoi(argv[2]));
      57:      broad_addr.sin_addr.s_addr = inet_addr(argv[1]);
      58:   
      59:      if(bind(sockfd, (SA *)&broad_addr, sizeof(broad_addr)) < 0)
      60:      {
      61:          perror("fail to bind");
      62:          exit(-1);
      63:      }
      64:      while(1)
      65:      {
      66:          recvfrom(sockfd, buffer, N, 0, (SA *)&peeraddr, &peerlen); 
      67:   
      68:          printf("%s : %d  : %s\n", inet_ntoa(peeraddr.sin_addr), ntohs(peeraddr.sin_port),buffer);
      69:      }
      70:   
      71:      return 0;
      72:  }

    运行:

    发送端:

    image

    接收端:

     image

  • 相关阅读:
    洛咕11月月赛部分题解 By cellur925
    POJ 2411 Mondriaan's Dream 【状压Dp】 By cellur925
    Luogu P1637 三元上升子序列【权值线段树】By cellur925
    Luogu P1438无聊的序列【线段树/差分】By cellur925
    Luogu P1558 色板游戏【线段树/状态压缩】By cellur925
    Luogu P4403 [BJWC2008]秦腾与教学评估【二分答案】By cellur925
    Luogu P3941 入阵曲【前缀和】By cellur925
    查询事件状态,mysql查看事件是否开启,设置启动时自动开启方法
    Logback详细整理,基于springboot的日志配置
    使用release自动打包发布正式版详细教程
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/2963469.html
Copyright © 2020-2023  润新知