UDP通讯协议广播和组播实现

      最后更新:2022-04-18 21:18:53 手机定位技术交流文章

      通过《联合民主党通讯议定书》广播

      UDP广播发送端

      #include "myhead.h"

      int main(int argc,char **argv)
      {
      int udpsock;
      int ret;
      char sbuf[100];
      指定 IPv4 处理需要 IP 和 端口号约束的正文变量。
      struct sockaddr_in bindaddr;
      bzero(&bindaddr,sizeof(bindaddr));
      bindaddr.sin_family=AF_INET;
      我不知道你在说什么,sin_addr.s_addr=htonl(INADR_ANY);//Auto 匹配发件人的ip
      我不确定 Binnddr. sin_port=htons (200) // 传送端口号 。

      / 保存 IPv4 地址的 IP 地址和 IP 端口号 。
      struct sockaddr_in otheraddr;
      bzero(&otheraddr,sizeof(otheraddr));
      otheraddr.sin_family=AF_INET;
      我不知道你指的是什么,其他addr.s_addr=inet_addr (),//我们的局域网地址
      我不知道你指的是什么 其它的addr.sin_port=htons (300) / 端口号

      做一个乌龟套接字
      udpsock=socket(AF_INET,SOCK_DGRAM,0);
      if(udpsock==-1)
      {
      校对:Portnoy
      return -1;
      }

      消除港口约束性限制
      int on=1;
      setsockopt(udpsock,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));

      //绑定
      ret=bind(udpsock,(struct sockaddr *)&bindaddr,sizeof(bindaddr));
      if(ret==-1)
      {
      ""
      return -1;
      }

      使插座属性可广播。
      setsockopt(udpsock,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));

      / 向课堂上的所有主持人广播无线电信息
      while(1)
      {
      bzero(sbuf,100);
      "你在这里做什么?""
      scanf("%s",sbuf);
      sendto(udpsock,sbuf,strlen(sbuf),0,(struct sockaddr *)&otheraddr,sizeof(otheraddr));
      }

      //关闭
      close(udpsock);
      return 0;
      }

      UDP广播接收端

      #include "myhead.h"

      int main(int argc,char **argv)
      {
      int udpsock;
      int ret;
      char sbuf[100];
      指定 IPv4 处理需要 IP 和 端口号约束的正文变量。
      struct sockaddr_in bindaddr;
      bzero(&bindaddr,sizeof(bindaddr));
      bindaddr.sin_family=AF_INET;
      我不知道你在说什么,Binnddr.s_addr=htonl(INADID_ANY);//自动匹配的接收端ip
      我不确定 Binnddr. sin_port=htons (300);//收到港口号

      / 保存 IPv4 地址的 IP 地址和 IP 端口号 。
      struct sockaddr_in otheraddr;
      bzero(&otheraddr,sizeof(otheraddr));
      int addrsize=sizeof(otheraddr);

      做一个乌龟套接字
      udpsock=socket(AF_INET,SOCK_DGRAM,0);
      if(udpsock==-1)
      {
      校对:Portnoy
      return -1;
      }

      消除港口约束性限制
      int on=1;
      setsockopt(udpsock,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));

      //绑定
      ret=bind(udpsock,(struct sockaddr *)&bindaddr,sizeof(bindaddr));
      if(ret==-1)
      {
      ""
      return -1;
      }

      //接收广播信息
      while(1)
      {
      bzero(sbuf,100);
      recvfrom(udpsock,sbuf,100,0,(struct sockaddr *)&otheraddr,&addrsize);
      prentf (“ip address:%s 端口号 :% hu 广播消息 :% sn”, inet_tenta (otheraddr.) 我不确定您指的是什么, sin_addr), nthohs (otheraddr.sbuf, (sin_port);
      }

      //关闭
      close(udpsock);
      return 0;
      }

      UDP通讯协议组播

      UDP组播发送端

      #include "myhead.h"

      int main(int argc,char **argv)
      {
      int udpsock;
      int ret;
      char sbuf[100];
      指定 IPv4 处理需要 IP 和 端口号约束的正文变量。
      struct sockaddr_in bindaddr;
      bzero(&bindaddr,sizeof(bindaddr));
      bindaddr.sin_family=AF_INET;
      我不知道你在说什么,sin_addr.s_addr=htonl(INADR_ANY);//Auto 匹配发件人的ip
      我不确定 Binnddr. sin_port=htons (200) // 传送端口号 。

      / 保存 IPv4 地址的 IP 地址和 IP 端口号 。
      struct sockaddr_in otheraddr;
      bzero(&otheraddr,sizeof(otheraddr));
      otheraddr.sin_family=AF_INET;
      我不知道你们在说什么,其他的,我不知道你们在说什么,sin_addr.s_addr=ind_addr(”);//我选择小组地址。
      我不知道你指的是什么 其它的addr.sin_port=htons (300) / 端口号

      做一个乌龟套接字
      udpsock=socket(AF_INET,SOCK_DGRAM,0);
      if(udpsock==-1)
      {
      校对:Portnoy
      return -1;
      }

      消除港口约束性限制
      int on=1;
      setsockopt(udpsock,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));

      //绑定
      ret=bind(udpsock,(struct sockaddr *)&bindaddr,sizeof(bindaddr));
      if(ret==-1)
      {
      ""
      return -1;
      }

      使插座属性可广播。
      setsockopt(udpsock,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));

      / 向添加到I组定义中的机器发送信息。
      while(1)
      {
      bzero(sbuf,100);
      你在这里做什么? "你在这里做什么?" ""你""在这里""你"在这里做什么?""你""你"在这里""你"在这里""你"做什么" "你""
      scanf("%s",sbuf);
      sendto(udpsock,sbuf,strlen(sbuf),0,(struct sockaddr *)&otheraddr,sizeof(otheraddr));
      }

      //关闭
      close(udpsock);
      return 0;
      }

      UDP组播接收端

      #include "myhead.h"

      int main(int argc,char **argv)
      {
      int udpsock;
      int ret;
      char sbuf[100];
      指定 IPv4 处理需要 IP 和 端口号约束的正文变量。
      struct sockaddr_in bindaddr;
      bzero(&bindaddr,sizeof(bindaddr));
      bindaddr.sin_family=AF_INET;
      我不知道你在说什么,Binnddr.s_addr=htonl(INADID_ANY);//自动匹配的接收端ip
      我不确定 Binnddr. sin_port=htons (300);//收到港口号

      / 保存 IPv4 地址的 IP 地址和 IP 端口号 。
      struct sockaddr_in otheraddr;
      bzero(&otheraddr,sizeof(otheraddr));
      int addrsize=sizeof(otheraddr);

      做一个乌龟套接字
      udpsock=socket(AF_INET,SOCK_DGRAM,0);
      if(udpsock==-1)
      {
      校对:Portnoy
      return -1;
      }

      消除港口约束性限制
      int on=1;
      setsockopt(udpsock,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));

      //绑定
      ret=bind(udpsock,(struct sockaddr *)&bindaddr,sizeof(bindaddr));
      if(ret==-1)
      {
      ""
      return -1;
      }

      / 添加到发件人指定的广播组
      sruct ip_mreq Mreq; / 结构变量定义保留群集信息
      bzero(&mreq, sizeof(mreq));
      对不起,先生, 先生, 先生, 先生, 先生, 先生, 先生, 先生, 先生, 先生, 先生, 先生, 先生, 先生, 先生, 先生, 先生, 先生。 我不知道, 我不知道, 我不知道, 我不知道, 我不知道, 我不知道, 我不知道, 我不知道, 我不知道, 我不知道, 我不知道, 我不知道,
      (d) //必须用这一宏加以具体说明;
      setsockopt(udpsock, IPPROTO_IP, IP_ADD_MEMBERSHIP,&mreq, sizeof(mreq)); //把这个主机添加到组播组里面

      //接收组播信息
      while(1)
      {
      bzero(sbuf,100);
      recvfrom(udpsock,sbuf,100,0,(struct sockaddr *)&otheraddr,&addrsize);
      prentf (“ip address:%s 端口号 :% hu 广播消息 :% sn”, inet_tenta (其他addr.). 我不确定您指的是什么, sin_addr), nthohs (其他addr.sbuf, (sin_port);
      }

      //关闭
      close(udpsock);
      return 0;
      }

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/22527.html

          热门文章

          文章分类