上代码,非常简单,使用参数控制发送和接收

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>// 3rd party includes.
#include <asio.hpp>
#include <string>
#include <thread>
using namespace std;
using namespace asio::ip;
void read(asio::ip::udp::socket& socket)
{asio::ip::udp::endpoint sender;std::vector<char> buffer;std::size_t bytes_readable = 0;for (;;){// Poll until data is available.while (!bytes_readable){// Issue command to socket to get number of bytes readable.asio::socket_base::bytes_readable num_of_bytes_readable(true);socket.io_control(num_of_bytes_readable);// Get the value from the command.bytes_readable = num_of_bytes_readable.get();// If there is no data available, then sleep.if (!bytes_readable){std::this_thread::sleep_for(std::chrono::milliseconds(200));//boost::this_thread::sleep(boost::posix_time::seconds(1));}}// Resize the buffer to store all available data.buffer.resize(bytes_readable);// Read available data.socket.receive_from(asio::buffer(buffer, bytes_readable),sender);// Extract data from the buffer.std::string message(buffer.begin(), buffer.end());// Output data.std::cout << "Received message:\n";std::cout << message << std::endl;}
}void write(asio::ip::udp::socket& socket,asio::ip::udp::endpoint& destination)
{//std::string message;//char buffer[256];//sprintf(buffer, msearchmsgfmt, "upnp:rootdevice");/*socket.async_send_to(boost::asio::buffer(buffer, strlen(buffer)), endpoint_,boost::bind(handle_send_to, this,boost::asio::placeholders::error));*/for (unsigned int i = 0; i < 300; ++i){//std::ostringstream stream;//stream << i;//message = stream.str();char buffer[256];sprintf(buffer, "this is test %d", i);std::cout << "Sent message ok->" << ""<< std::endl;socket.send_to(asio::buffer(buffer, strlen(buffer)), destination);std::this_thread::sleep_for(std::chrono::milliseconds(5000));}
}int main(int argc, char* argv[])
{// Extract command-line arguments.bool receiver = true;string addr = "234.0.0.1";if (argc < 2){receiver = true;}elsereceiver = std::string(argv[1]) == "s" ? false : true;asio::ip::address address =asio::ip::address::from_string(addr);unsigned short port = 1900;  //boost::lexical_cast<unsigned short>(1900);asio::ip::address local =asio::ip::address::from_string("0.0.0.0");//unsigned short localport = 50000;// Create socket.asio::io_context service;udp::socket socket(service);socket.open(asio::ip::udp::v4());socket.set_option(udp::socket::reuse_address(true));//socket.set_option(asio::ip::multicast::enable_loopback(true));socket.bind(udp::endpoint(asio::ip::address_v4::any(),receiver ? port : 16200));//socket.bind(//  udp::endpoint(local,1900));udp::endpoint destination(address, port);// Join group.socket.set_option(asio::ip::multicast::join_group(address));// Start read or write loops based on command line options.//std::thread t([](){//    printf("this is a test");//}); // pass by referenceif (receiver)read(socket);elsewrite(socket,destination);//std::thread t(read, std::ref(socket)); // pass by reference//write(socket, destination);return 0;
}

编译

g++ -std=c++11 main.cpp -o out -lpthread -I./include
由于使用了c++11 线程所以使用c++11 编译,线程必须加上 -lpthread 参数, 使用asio,
所以includ 是asio的include头文件
linux 下执行
./out
没有参数则表示接收,开始执行接收

windows下编译使用vs,加上一个参数

-s 参数表示发送
windows下CTRL+F5执行

执行结果


window程序开始发送
linux程序开始接收

c++基于asio的组播:windows linux通信相关推荐

  1. 基于 UDP 的 组播、广播详解

    背景 有些时候我们在网络通信中也需要用到 组播(多播).广播.现在我们来介绍如何实现. 建议:在此之前,关闭防火墙. ubuntu: service ufw stop windows: 控制面板关闭 ...

  2. 虚拟机无法接受组播消息_基于UDP的组播通信

    基于UDP的组播通信 在Java实现基于UDP协议的发送端与接收端通信中,我们可以知道它的一些主要操作: 在发送端:1,创建绑定指定端口的发送接口:DatagramSocket(port) 2,创建绑 ...

  3. 计算机怎么配置组播地址,基于eNSP的组播配置实验.docx

    基于 eNSP 的组播配置实验 摘 要:本文首先对路由协议与组播协议和进行简述, 其次通过 eNSP 模拟器完成网络的基础配置和多播配置,最 后通过实验测试来验证这一方法的可行性,并对应用过程中 的易 ...

  4. 基于UDP的组播网络程序

    在服务器端: package Zubo; import java.io.IOException; import java.net.DatagramPacket; import java.net.Ine ...

  5. 嵌入式linux局域网组播发不了,组播 IP_MULTICAST_LOOP回环在Linux和Windows的差异

    在TX2嵌入式开发板上(Ubuntu操作系统)编写网络组播发送接收程序,首先了解一下组播. linux多播编程 linux多播编程步骤: 1>建立一个socket; 2>设置多播的参数,例 ...

  6. 技术方案——可控组播

    --IPTV业务的承载风帆 一. 前言 进几年来,随着网络带宽和接入用户的迅猛增加,宽带业务运营商已经将关注的焦点逐渐由提高宽带用户数向提高户均营收(ARPU)值的目标转移.IPTV业务作为消除宽带用 ...

  7. 未指定发送trap的源接口_组播之RPF接口检测

    RPF的检测方法: 1.unicast routing table--单播路由表检测 2.multicast route static--组播路由静态检测 3.MBGP(Muiticast Addre ...

  8. IP组播配置与管理实战——5

    组播VLAN配置与管理 组播VLAN(Multicast VLAN)一般部署于设备的网络侧来实现组播流汇聚,然后将组播报文在用户VLAN内复制分发.华为S系列交换机支持基于用户VLAN和基于接口两种方 ...

  9. IP组播配置与管理——5

    组播VLAN配置与管理 组播VLAN(MulticastVLAN)一般部署于设备的网络侧来实现组播流汇聚,然后将组播报文在用户VLAN内复制分发.华为S系列交换机支持基于用户VLAN和基于接口两种方式 ...

最新文章

  1. 2022-2028年中国亲子游行业市场分析及前瞻研究报告
  2. 自动化监控--zabbix中的Macros(宏)详解
  3. OpenCV基本的SIMD的实例(附完整代码)
  4. 程序详细设计之代码编写规范_我在不编写任何代码的情况下建立了一个设计策划网站
  5. [改善Java代码]不要覆写静态方法
  6. tcp校验和计算校验和例子_OSI参考模型和TCP/IP参考模型
  7. 程序员一人对接四人郁闷吐槽:轮流指挥,只有我从天亮忙到天黑
  8. 基于任务的异步模式(TAP)
  9. php禁用错误提示,php开启与关闭错误提示详解
  10. Ant Design UI 框架的的安装及使用
  11. LGOJP1941 飞扬的小鸟
  12. ACM 竞赛高校联盟 练习赛 第六场 光头强的强迫症(线段树)
  13. Jmeter压力测试实战
  14. 刘强东案章泽天首发声;科大讯飞回应 AI 同传造假;新 iPhone 被指存缺陷 | 极客头条...
  15. java word 加水印_java如何给office加水印
  16. Java 相关的技术摘要
  17. 企业网站如何做好搜索引擎优化
  18. 内外部函数和内存模型
  19. 国标GB28181安防摄像头如何通过视频流媒体服务器建设阳光考场?
  20. 计算机创新创业1000字,大学生创新创业论文1000字

热门文章

  1. FSK软件鉴频,输出串行基带数据信号
  2. python 知识点怎么办_python中的小知识点
  3. 2022MWC上海预计6月29号开幕
  4. NVIDIA 发布 60 余项 CUDA-X 库更新,加速量子计算和 6G 研究等
  5. iPhone 13系列7款新机已通过EEC认证:或继续9月亮相
  6. 苹果汽车自动驾驶又出新信号:正与多家激光雷达供应商谈判
  7. 刘强东退出武汉京东世纪贸易有限公司经理一职
  8. iPhone 12将首次加入屏下指纹?都是为它铺路?
  9. 长虹美菱:公司主要通过抖音短视频等平台进行直播带货
  10. Redmi K30 Pro屏幕参数公布:没有90Hz刷新率又如何?