C/C++开发,udp组播通信实现(c++) 目录一、udp通信二、实现代码逻辑2.1 发送方2.2 接收方三、完整源代码及测试配置一、udp通信前几天需要做一个和第三方平台配套的单向通信反向隔离的通信接口原本确定是采用UDP组播方式实现通信设备中间加正向网络隔离装置防止反通信。我想着赶紧先行测试验证一下哪知我好不容易花了一个下午编译测试后对接的厂家却反馈说不再使用udp通信他们要用http方式并不考虑两个系统通信隔离问题。我只能心里不爽但谁让是我司求人配合呢只好改用http实现又赶了一个工作日把http开发接口开发出来。嗯储备过的知识不能丢放到CSDN上给予有需要的小伙伴也行。udp发送调用socket套接字实现很简单无非就是调用sendto函数发送信息调用recvfrom函数接收数据其关键点就是接收方需要绑定组播地址和端口相当于加入组播才能接收到数据。另外需要明确两个概念组播地址和本机地址例如234.3.3.3和192.168.1.100.二、实现代码逻辑以linux为例展示其实现关键点2.1 发送方首先我们看下发送方1构造socketudp_socket socket(AF_INET, SOCK_DGRAM, 0);//如果需要绑定记得绑定本地地址2指定发送的组播地址和端口struct sockaddr_in mcast_addr;memset(mcast_addr, 0, sizeof(mcast_addr));mcast_addr.sin_family AF_INET;mcast_addr.sin_addr.s_addr inet_addr(mcast_ip.c_str());mcast_addr.sin_port htons(mcast_port);3发送组播数据//it为组播数据内容描述int n sendto(udp_socket, it.c_str(), it.length(),0,(struct sockaddr*)mcast_addr,sizeof(mcast_addr));4关闭socketclose(udp_socket);2.2 接收方下面看看接收方的实现1同样是先构建socketudp_socket socket(AF_INET, SOCK_DGRAM, 0);2绑定本机地址//struct sockaddr_in local_addr;memset(local_addr, 0, sizeof(local_addr));local_addr.sin_family AF_INET;local_addr.sin_addr.s_addr htonl(INADDR_ANY);//local_addr.sin_addr.s_addr inet_addr(local_ip.c_str());//指定发送的网口local_addr.sin_port htons(mcast_port);//建立本地捆绑主机地址/端口号int err -1;err bind(udp_socket,(struct sockaddr*)local_addr, sizeof(local_addr));3加入组播,才能接收到组播信息struct ip_mreq mreq;mreq.imr_multiaddr.s_addr inet_addr(mcast_ip.c_str());if(local_ip.empty()){mreq.imr_interface.s_addr htonl(INADDR_ANY); //任意接口接收组播信息}else{mreq.imr_interface.s_addr inet_addr(local_ip.c_str()); //指定接口接收组播信息}err setsockopt(udp_socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, mreq, sizeof(mreq));4接收数据sockaddr_in srv_Addr;//用于存储发送方信息socklen_t addr_len sizeof(srv_Addr);char *buff new char[buf_size];memset(buff, 0, buf_size);n recvfrom(udp_socket, buff, buf_size, 0,(struct sockaddr*)srv_Addr,addr_len);5使用完后可以退出组播关闭socketerr setsockopt(udp_socket, IPPROTO_IP, IP_DROP_MEMBERSHIP, mreq, sizeof(mreq));close(udp_socket);三、完整源代码及测试配置完整的udp实例可以去我的下载资源下载udp_test.zipudp_test.zip_c组播通信-网络基础代码类资源-CSDN下载该实例我采用的编译环境是centos7.3_x64/gcc4.8win8_x64/vs2015,支持cmake配置其中发送端仅实现linux接收端实现linux/win