【C++】HP-Socket(三):UdpClient、UdpServer、UdpCast、UdpNode的区别

news/2024/5/19 12:28:54

1、简述

UDP是无连接的,在UDP传输层中并没有客户端和服务端的概念。但是可以在应用层定义客户端和服务端,可以灵活的互换客户端和服务端,或者同时既是客户端也是服务端。

HP-Socket中在应用层定义了四种UDP组件:UdpClient、UdpServer、UdpCast、UdpNode

2、区别

1)UdpClient
UdpClient 是客户端的UDP,向服务器发送 UDP 数据包后等待接收响应。

2)UdpServer
UdpServer 是服务端的UDP,用于监听端口,接收来自多个客户端的 UDP 数据包,并可以向这些客户端发送响应。

3)UdpCast
UdpCast 是专用于 UDP 广播或组播的组件,和 UdpClient 类似继承自 IClient,本质也属于客户端。

4)UdpNode
UdpNode 是通用的 UDP 通信节点,没有客户端和服务端的概念,也可以认为既是客户端也是服务端
还可以实现广播和组播功能。

3、用法

3.1 UdpClient

基本用法

  • 创建 UdpClient 实例。
  • 调用 Start 方法启动客户端,并指定本地监听的 IP 和端口。
  • 使用 Send 方法向服务器发送数据。
  • 接收来自服务器的数据。
  • 调用 Stop 方法停止客户端。
#include "HPSocket.h"
#include "SocketInterface.h"int main() {IUdpClient* pClient = CreateUdpClient();if (pClient->Start("0.0.0.0", 0)) {const char* serverAddress = "127.0.0.1";USHORT serverPort = 5555;const char* message = "Hello, Server!";pClient->Send(serverAddress, serverPort, (const BYTE*)message, strlen(message));}pClient->Stop();DestroyUdpClient(pClient);return 0;
}

3.2 UdpServer

基本用法

  • 创建 UdpServer 实例。
  • 实现一个监听器类,继承自 IUdpServerListener,并实现其方法,如 OnPrepareListen、OnReceive 等。
  • 设置服务器的监听器。
  • 调用 Start 方法启动服务器,并指定监听的 IP 和端口。
  • 处理接收到的数据。
  • 调用 Stop 方法停止服务器
#include "HPSocket.h"
#include "SocketInterface.h"class CListener : public CUdpServerListener {
public:virtual EnHandleResult OnReceive(IUdpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength) {printf("Received: %s\n", pData);return HR_OK;}
};int main() {IUdpServer* pServer = CreateUdpServer();CListener listener;pServer->SetListener(&listener);if (pServer->Start("0.0.0.0", 5555)) {printf("Server started.\n");getchar();  // 等待输入,退出服务}pServer->Stop();DestroyUdpServer(pServer);return 0;
}

4、组播TTL和回环

1)TTL(Time To Live)即“生存时间”,用于指定数据包在网络中可以经过的最大路由器(跳数)数量。

  • TTL = 0:数据包只能在本地机器上循环,不会被发送到任何网络。
  • TTL = 1:数据包只能在同一子网内传输,不能跨越路由器。
  • 较高的TTL值:如果TTL值更高,数据包可以跨越多个路由器,从而到达更远的网络。

2)loop(环回)

  • 启用:发送的数据包可以被同一主机上的组播组成员接收。
  • 禁用:发送的数据包不会被发送者所在的主机接收。

http://www.mrgr.cn/p/21132463

相关文章

PHP的数组练习实验

实 验 目 的 掌握索引和关联数组,以及下标和元素概念; 掌握数组创建、初始化,以及元素添加、删除、修改操作; 掌握foreach作用、语法、执行过程和使用; 能应用数组输出表格和数据。 任务1:使用一维索引数…

已知前中后序遍历的其中两种推断出最后一种序遍历

已知二叉树后序遍历序列是 dabec,中序遍历序列是debac,它的前序遍历序列是? 方法1: 首先可以确定c为根 d为最左子树 由中序debac 假设b为第2排的子树 那么后序的后两位应该是bc yu本题题目后序不符合 由中序debac 假设e为第2排的字数 那么后序的后两位应该是ec 符合本题题目…

ME创新计划|山乡宝贝五月集体生日会 爱与温暖相伴

2024年5月1日,ME创新计划山乡宝贝五月集体生日会如约而至,在长乐坊亲子家庭生态农场,9 名山乡宝贝一起渡过了美好时光,志愿者们的精心筹备,让这个日子变得格外温馨而难忘。 生日会由夏惠玲老师主持,宝贝们手…

[每日AI0506]巴菲特谈 AI,李飞飞创业,苹果或将推出 AI 功能,ChatGPT 版搜索引擎

AI 资讯苹果或将推出 AI 功能,随 iPhone 发布 2024 年巴菲特股东大会,巴菲特将 AI 类比为核技术 巴菲特股东大会 5 万字实录 消息称 OpenAI 将于 5 月 9 日发布 ChatGPT 版搜索引擎 路透社消息,斯坦福大学 AI 领军人物李飞飞打造“空间智能”创业公司 报道地址 爆款生成式 A…

玩comfyui踩过的坑之使用ComfyUI_Custom_NODES_ALEKPET翻译组件问题

环境: 秋叶安装包,安装ComfyUI_Custom_NODES_ALEKPET组件或者直接下载网盘中的包,直接解压包到comfyui根目录/custom_nodes/,重启后,按指导文件操作。 注意:网盘指导包中有配置好的流程json文件&#xff0…

STM32——TIMER(定时器)篇

技术笔记! 1. 定时器概述(了解) 1.1 软件定时器原理 使用纯软件(CPU死等)的方式实现定时(延时)功能 缺点:1. 延时不准确 2. CPU死等。 1.2 定时器定时原理 1.…

Ranni: Taming Text-to-Image Diffusion for Accurate Instruction Following

Ranni: Taming Text-to-Image Diffusion for Accurate Instruction Following abstract 我们引入了一个语义面板作为解码文本到图像的中间件,支持生成器更好地遵循指令 Related work 最近的工作还通过包含额外的条件(如补全掩码[15,45]、…

程序设计题

设计一程序实现功能,处理字符串A,处理规则是:只要B字里面有的字母,不分大小写,一律从A 字符串中删掉。/*************************************************** file name:Pro_StuInfo.c* author :momolyl@126.com* date :2024/05/06* function :设计一程序实…

21 内核开发-临界区及临界区代码段判断

内核开发-临界区判断 目录 内核开发-临界区判断 1.定义 2.临界区实现机制 3.使用互斥锁实现临界区的示例 4.怎么识别是临界区代码 5.总结 1.定义 临界区是计算机系统中的一段代码,在任何时刻只能被一个线程执行。临界区的目的是防止多个线程同时访问共享资源…

如何将视频转换成gif表情包?超简单的方法分享

把视频中的片段截取制作成gif动画表情包是现在网络中常见的制作图片的一种方法。Gif表情包能够调节聊天中的氛围,快速有趣的传递信息。也因为gif动图兼容性高、体积小便于分享所以在现在的网络中非常的收欢迎。接下来,小编就给大家分享一下怎么把视频转g…

接口自动化测试之-requests模块详解

一、requests背景 Requests 继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。 二、requests安装 利用p…

排查Java反射调用的InvocationTargetExcetion问题

在Java中通过反射调用方法时,常见的一个异常是:java.lang.reflect.InvocationTargetException,将异常信息打印到日志文件中时通常会有如下一句信息:java.lang.reflect.InvocationTargetException: null,由于在异常信息中存在"null",一开始就会非常敏感,会误以…

什么是PXE

文章目录 在局域网内搭建PXE服务器PXE 启动组件PXE的优点实验一、搭建PXE服务器,实现远程部署CentOS系统环境准备server关闭防火墙安装组件准备 Linux 内核、初始化镜像文件及PXE引导文件配置启用TFTP 服务配置启动DHCP服务准备CentOS 7 安装源配置启动菜单文件 Cli…

力扣每日一题114:二叉树展开为链表

题目 中等 提示 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同…

MySQL#MySql数据库的操作

目录 一、创建数据库 二、字符集和校验规则 1.查看系统默认字符集以及校验规则 2.查看数据库支持的字符集 3.查看数据库支持的字符集校验规则 4.校验规则对数据库的影响 1.以UTF-8格式创建数据库 2.不区分大小写 3.区分大小写 4 大小写对数据库的影响 三、操纵数据…

【MySQL数据库】详解数据库审核工具SQLE的部署及接口调用

SQLE部署及使用 1. 部署SQLE SQLE相信大家都不陌生吧,它是一款开源,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL审核工具。我们可以基于此工具进行数据库SQL审核,提升SQL脚本质量…

Bookends for Mac:文献管理工具

Bookends for Mac,一款专为学术、研究和写作领域设计的文献管理工具,以其强大而高效的功能深受用户喜爱。这款软件支持多种文件格式,如PDF、DOC、RTF等,能够自动提取文献的关键信息,如作者、标题、出版社等&#xff0c…

删除字符串中与另一个字符串中的相同字母的自定义函数

#include <stdio.h> /********************************************************************* 函数名称: str_DestDel* 函数功能: 删除一个字符串中与另一个字符串中的相同字母并且不区分大小写* 函数参数:* @strA 需要操作的字符串* @strB 作为参考的字符串…

2×24.5W、内置 DSP、低失真、高信噪比、I2S 输入 D 类音频功率放大器,完美替换TPA5805,晶豪,致盛,

ANT3825 是一款高集成度、高效率的双通道数字 输入功放。供电电压范围在 5V&#xff5e;18V&#xff0c;数字接口 电源支持 3.3V 或 1.8V。双通道 BTL 模式下输出 功率可以到 224.5W(4Ω&#xff0c;16V&#xff0c;THDN1%)&#xff0c; 单通道 PBTL 模式下可以输出 37W&#x…

SwiftUI Text 文字处理

代码// // ContentView.swift // SwiftUIText // // Created by CHEN Hao on 2024/5/6. //import SwiftUIstruct ContentView: View {var body: some View {VStack{Text("Your time is limited, so don’t waste it living someone else’s life. Don’t be trapped by…