UDP单播

CMakeLists.txt文件中添加如下行:

link_libraries(ws2_32)

1.发送端

#include <iostream>
#include <winsock2.h>
#include <cstdio>#pragma comment(lib, "Ws2_32.lib")  // Link with ws2_32.libint main() {1.Initialize winsockWSADATA wsaData;int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);if (iResult != NO_ERROR) {wprintf(L"WSAStartup failed with error: %d\n", iResult);return 1;}2.Create a socket for sending dataSOCKET SendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);if (SendSocket == INVALID_SOCKET) {wprintf(L"socket failed with error: %1d\n", WSAGetLastError());WSACleanup();return 1;}3.Set up the RecvAddr structure with the IP address of the receiver (in this example case "192.168.1.1")and the specified port number.sockaddr_in RecvAddr = {0};unsigned short Port = 27015;RecvAddr.sin_family = AF_INET;RecvAddr.sin_port = htons(Port);RecvAddr.sin_addr.s_addr = inet_addr("127.0.0.1");4.Send a datagram to the receiverwprintf(L"Sending a datagram to the receiver...\n");char sendBuf[1024]="Hello";int BufLen = 1024;iResult = sendto(SendSocket, sendBuf, BufLen, 0, reinterpret_cast<SOCKADDR *>(&RecvAddr), sizeof(RecvAddr));if (iResult == SOCKET_ERROR) {wprintf(L"sendto failed with error: %d\n", WSAGetLastError());closesocket(SendSocket);WSACleanup();return 1;}5.When the application is finished sending, close the socket.wprintf(L"Finished sending. Closing socket. \n");iResult = closesocket(SendSocket);if (iResult == SOCKET_ERROR) {wprintf(L"closesocket failed with error: %d\n", WSAGetLastError());WSACleanup();return 1;}6.Clean up and quit.wprintf(L" Exiting.\n");WSACleanup();return 0;
}

2.接收端代码

#include <iostream>
#include <winsock2.h>
#include <cstdio>#pragma comment(lib, "Ws2_32.lib")  // Link with ws2_32.libint main() {1.Initialize winsockWSADATA wsaData;int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);if (iResult != NO_ERROR) {wprintf(L"WSAStartup failed with error: %d\n", iResult);return 1;}2.Create a receiver socket to receive datagramsSOCKET RecvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);if (RecvSocket == INVALID_SOCKET) {wprintf(L"socket failed with error: %1d\n", WSAGetLastError());return 1;}3.Bind the socket to any address and the specified port.sockaddr_in RecvAddr = {0};unsigned short Port = 27015;RecvAddr.sin_family = AF_INET;RecvAddr.sin_port = htons(Port);RecvAddr.sin_addr.s_addr = htonl(INADDR_ANY);iResult=bind(RecvSocket,reinterpret_cast<SOCKADDR*>(&RecvAddr), sizeof(RecvAddr));if (iResult != 0) {wprintf(L"bind failed with error: %d\n", WSAGetLastError());return 1;}4.Call the recvfrom function to receive datagrams on the bound socket.wprintf(L"Receiving datagrams...\n");char RecvBuf[1024];int RecvAddrSize=sizeof(RecvAddr);iResult = recvfrom(RecvSocket, RecvBuf, sizeof(RecvBuf), 0, reinterpret_cast<SOCKADDR *>(&RecvAddr), &RecvAddrSize);if (iResult == SOCKET_ERROR) {wprintf(L"recvfrom failed with error: %d\n", WSAGetLastError());} else{printf("%s\n",RecvBuf);}5.Close the socket when finished receiving datagramswprintf(L"Finished receiving. Closing socket. \n");iResult = closesocket(RecvSocket);if (iResult == SOCKET_ERROR) {wprintf(L"closesocket failed with error: %d\n", WSAGetLastError());WSACleanup();return 1;}6.Clean up and quit.wprintf(L" Exiting.\n");WSACleanup();return 0;
}

执行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2659946.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

平衡二叉树(AVL树)原理

1、平衡二叉树(AVL树) 平衡二叉树也称之为AVL树&#xff0c;是一个具有以下特征的二叉搜索树&#xff1a; 1、左子树和右子树高度差不会大于1 2、左右两颗子树都满足第一个条件。 1.1、满足条件的AVL树 以下树&#xff0c;左边的高度为3&#xff0c;右边的高度为2&#xf…

Azure 学习总结

文章目录 1. Azure Function1.1 Azure Function 概念1.2 Azure Function 实现原理1.3 Azure Function 本地调试1.4 Azure Function 云部署 2. Azure API Managment 概念 以及使用2.1 Azure API 概念2.2 Azure API 基本使用 3. Service Bus 应用场景及相关特性3.1 Service Bus 基…

使用Microsoft托管密钥的Azure信息保护云退出

由于各种原因&#xff0c;一些组织需要一个明确定义的流程来停止使用 Azure 信息保护以及对云服务的任何依赖&#xff0c;而不会在采用之前失去对其数据的访问权限 - 以便在出现需要时做好准备。 Azure 信息保护 (AIP) 为使用自带密钥 (BYOK) 的客户和使用 Microsoft 托管密钥…

数字市场绽放:探秘跨境电商的未知世界

随着全球数字化浪潮的涌动&#xff0c;跨境电商在数字市场中迎来了绚烂的绽放。这个未知的世界不仅是商业的前沿&#xff0c;更是技术、创新与全球化融合的产物。本文将深入探讨跨境电商的独特之处&#xff0c;从数字市场的角度揭示其未知世界的奥秘。 跨境电商的定义与演变 跨…

76 Python开发-内外网收集Socket子域名DNS

目录 Python开发相关知识点本篇文章涉及知识点演示案例:IP&Whois&系统指纹获取代码段-外网CDN&子域名&端口扫描&交互代码段-外网IP&计算机名&存活主机&端口扫描代码段-内网Py格式解析环境与可执行程序格式转换-Pyinstaller 涉及资源&#xff1…

记一次应急响应练习(Linux)

记一次应急响应练习(Linux) Linux&#xff1a; 请提交攻击者的IP地址 答&#xff1a; 192.168.31.132 思路&#xff1a; 通过查看历史命令和开放的8080端口看到这台主机上运行的是Tomcat服务。并且在历史命令中看到了Tomcat的安装路径。那么就算是找到了日志的查看点了&#x…

第18章程序设计

Swing程序设计 Swing用于开发桌面窗体程序用于JDK的第二代GUI框架&#xff0c;其功能比JDK第一代GUI框架AWT更为强大&#xff0c;性能更加优良。但因为Swing技术推出时间太早&#xff0c;七性能&#xff0c;开发效率等不及一些其他的留下技术&#xff0c;所以目前市场大多数桌面…

专题四:前缀和

前缀和 一.一维前缀和(模板)&#xff1a;1.思路一&#xff1a;暴力解法2.思路二&#xff1a;前缀和思路 二. 二维前缀和(模板)&#xff1a;1.思路一&#xff1a;构造前缀和数组 三.寻找数组的中心下标&#xff1a;1.思路一&#xff1a;前缀和 四.除自身以外数组的乘积&#xff…

留言板(Mybatis连接数据库版)

目录 1.添加Mybatis和SQL的依赖 2.建立数据库和需要的表 3.对应表中的字段&#xff0c;补充Java对象 4.对代码进行逻辑分层 5.后端逻辑代码 之前的项目实例【基于Spring MVC的前后端交互案例及应用分层的实现】https://blog.csdn.net/weixin_67793092/article/details/134…

drf知识-08

Django之了解DRF框架 # 介绍&#xff1a;DRF全称 django rest framework # 背景&#xff1a; 在序列化与反序列化时&#xff0c;虽然操作的数据不尽相同&#xff0c;但是执行的过程却是相似的&#xff0c;也就是说这部分代码是可以复用简化编写的 增&#xff1a;校验请…

第三课:寄存器与内存、中央处理器(CPU)、指令和程序及高级 CPU 设计

第三课&#xff1a;寄存器与内存、中央处理器&#xff08;CPU&#xff09;、指令和程序及高级 CPU 设计 第六章&#xff1a;寄存器与内存课程导入1、概念梳理2、锁存器3、门锁4、寄存器5、门锁矩阵5、内存 第七章&#xff1a;中央处理器&#xff08;CPU&#xff09;1、概念梳理…

Illustrator脚本 #015 自动角线

这是一个在画板上自动生成辅助线和角线的脚本,只要单击最右边按钮运行脚本即可。 绿色的为参考线及出血线。 #target "Illustrator" var settings = {addTrim : true,addBleedGuide : true,addCenterGuide : true,addCover : false,overlapAlert : false,trimma…

WEB 3D技术 three.js 设置环境贴图 高光贴图 场景设置 光照贴图

上文WEB 3D技术 three.js 基础网格材质演示几何体贴图 ao贴图效果我们简单构建了一个贴图和ao贴图的几何体材质 我们接下来 来看一下透明度贴图 我们还是官网搜索 MeshBasicMaterial 然后 是我们的 alphaMap 属性 这里 黑色为完全透明 白色 完全不透明 黑白之间还有灰色 这个灰…

【数据库系统概论】第6章-关系数据库理论

真别看吧&#xff0c;抄ppt而已啊 文章目录 6.1 引言6.2 规范化6.2.1 函数依赖6.2.2 码6.2.3 范式&#xff08;Normal Form&#xff09;6.2.4 BC范式6.2.5 规范化小结 6.1 引言 我们有这样一张表&#xff1a; but 为啥这样设计呢&#xff1f;由此引出怎样设计一个关系数据库…

Mac电脑如何长截图?

https://zhuanlan.zhihu.com/p/543012365 1、打开需要截图的网页&#xff08;小编随意输入的内容&#xff09;&#xff0c;如图 2、按下组合快捷键【commandoptioni】&#xff0c;出现“html”界面&#xff0c;如图 3、按下组合快捷键【commandshiftp】&#xff0c;出现搜索界…

使用激光干涉测量时克服振动问题

干涉仪的工作原理 干涉仪可以极其精确地测量物体。他们的工作原理是使用分束器将一束光分成相等的两半&#xff0c;分束器实际上是一块涂有薄银的玻璃。当光照射到分束器上时&#xff0c;一半的光通过&#xff0c;一半的光被反射回来。其中一束光束&#xff08;称为参考光束&a…

软件测试常见的面试题,这些题面试前看提高百分之60的通过率

01、您所熟悉的测试用例设计方法都有哪些&#xff1f;请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 答&#xff1a;有黑盒和白盒两种测试种类&#xff0c;黑盒有等价类划分法&#xff0c;边界分析法&#xff0c;因果图法和错误猜测法。白盒有逻辑覆盖法&…

Ubuntu18.04安装GTSAM库并验证GTSAM是否安装成功(亲测可用)

在SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;和SFM&#xff08;Structure from Motion&#xff09;这些复杂的估计问题中&#xff0c;因子图算法以其高效和灵活性而脱颖而出&#xff0c;成为图模型领域的核心技术。GTSAM&#xff08;Georgia Tech Smo…

关于Redis面试题

前言 之前为了准备面试&#xff0c;收集整理了一些面试题。 本篇文章更新时间2023年12月27日。 最新的内容可以看我的原文&#xff1a;https://www.yuque.com/wfzx/ninzck/cbf0cxkrr6s1kniv Redis 是什么 全名&#xff1a;远程字典服务。这是一个开源的在内存中的数据结构存…

C#高级 01.Net多线程

一.基本概念 1.什么是线程&#xff1f; 线程是操作系统中能独立运行的最小单位&#xff0c;也是程序中能并发执行的一段指令序列线程是进程的一部分&#xff0c;一个进程可以包含多个线程&#xff0c;这些线程共享进程资源进程有线程入口&#xff0c;也可以创建更多的线程 2.…