一个简单的UDP客户端和服务端的完整C++示例

下面是一个简单的UDP客户端和服务端的完整C++示例。这个示例展示了如何创建一个UDP客户端和服务端,并在它们之间发送和接收消息。


```cpp
UDP 服务端
cpp
// udp_server.cpp
#include <iostream>
#include <cstring>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>#define PORT 8080
#define BUFFER_SIZE 1024int main() {int sockfd;char buffer[BUFFER_SIZE];struct sockaddr_in servaddr, cliaddr;// 创建socket文件描述符if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {perror("socket creation failed");exit(EXIT_FAILURE);}memset(&servaddr, 0, sizeof(servaddr));memset(&cliaddr, 0, sizeof(cliaddr));// 填充服务器信息servaddr.sin_family    = AF_INET; // IPv4servaddr.sin_addr.s_addr = INADDR_ANY;servaddr.sin_port = htons(PORT);// 绑定socket与地址if ( bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr)) < 0 ){perror("bind failed");close(sockfd);exit(EXIT_FAILURE);}int len, n;len = sizeof(cliaddr);  // 获取客户端地址大小while (true) {n = recvfrom(sockfd, (char *)buffer, BUFFER_SIZE, MSG_WAITALL, ( struct sockaddr *) &cliaddr, (socklen_t*)&len);buffer[n] = '\0';std::cout << "Client : " << buffer << std::endl;const char *hello = "Hello from server";sendto(sockfd, hello, strlen(hello), MSG_CONFIRM, (const struct sockaddr *) &cliaddr, len);std::cout << "Hello message sent." << std::endl;}close(sockfd);return 0;
}
UDP 客户端
cpp
// udp_client.cpp
#include <iostream>
#include <cstring>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>#define PORT 8080
#define BUFFER_SIZE 1024int main() {int sockfd;char buffer[BUFFER_SIZE];struct sockaddr_in     servaddr;// 创建socket文件描述符if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {perror("socket creation failed");exit(EXIT_FAILURE);}memset(&servaddr, 0, sizeof(servaddr));// 填充服务器信息servaddr.sin_family = AF_INET;servaddr.sin_port = htons(PORT);servaddr.sin_addr.s_addr = INADDR_ANY;int n, len;const char *message = "Hello from client";sendto(sockfd, message, strlen(message), MSG_CONFIRM, (const struct sockaddr *) &servaddr, sizeof(servaddr));std::cout << "Hello message sent." << std::endl;n = recvfrom(sockfd, (char *)buffer, BUFFER_SIZE, MSG_WAITALL, (struct sockaddr *) &servaddr, (socklen_t*)&len);buffer[n] = '\0';std::cout << "Server : " << buffer << std::endl;close(sockfd);return 0;
}
编译和运行
你需要在终端中分别编译服务端和客户端代码:g++ udp_server.cpp -o udp_server
g++ udp_client.cpp -o udp_client
然后首先启动服务端:./udp_server
再启动客户端:./udp_client

如果一切正常,服务端会收到来自客户端的消息并回复,客户端则会显示服务端的回复消息。注意事项
端口冲突:确保端口号(这里是8080)没有被其他应用程序占用。
权限问题:某些端口(如小于1024的端口)需要有管理员权限才能绑定。
网络设置:确保防火墙或其他网络设置允许UDP流量通过所选的端口。
这段代码示范了最基本的UDP通信,在实际应用中可能需要更复杂的错误处理和数据管理。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring之IoC(容器配置、Spring坐标导入、获取bean)

这里的话&#xff0c;因为博主学习时间有限&#xff0c;并没有实际去操作&#xff0c;只是学习和了解一个大概的流程。 目录 一、引言 1、管理什么&#xff1f;&#xff08;对象&#xff1a;Service、Dao ...&#xff09; 2、如何将被管理的对象告知 IoC 容器?&#xff08;用…

【ARM 安全系列介绍 3.7 -- SM4 对称加密算】

请阅读【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | GCC | CSH | Armv8/v9 系统异常分析】 文章目录 SM4 加密算法简介SM4 工作模式算法步骤加密举例注意事项 Principle of SM4 encryption algorithm SM4 加密算法简介 SM4是一种分组…

如何基于Redis实现分布式锁?

分布式锁介绍 对于单机多线程来说&#xff0c;在 Java 中&#xff0c;我们通常使用 ReetrantLock 类、synchronized 关键字这类 JDK 自带的 本地锁 来控制一个 JVM 进程内的多个线程对本地共享资源的访问。 下面是我对本地锁画的一张示意图。 本地锁 从图中可以看出&#xf…

Unity 限时免费资源 - FANTASTIC万圣节资源包

Unity 资源 - FANTASTIC - Halloween Pack 万圣节包 前言资源包内容领取兑换码 前言 亲爱的 Unity 游戏开发者们&#xff0c;今天要给大家介绍一款限时免费的优质资源包 - FANTASTIC - Halloween Pack 万圣节资源包。 这个资源包为您的游戏创作带来了丰富的万圣节主题元素。其…

开关阀(3):Fisher DVC6200定位器原理及调试

Fisher DVC6200---Digital Valve Controllers&#xff08; 数字阀门控制器&#xff09;简写 DVC,而6200是Fisher DVC定位器发展的一个系列型号&#xff0c;是Fisher结合DVC2000、DVC6000系列&#xff0c;取其特点发展的有着高适用性和高可靠性的阀门定位器。 DVC6200 原理&…

线性代数|机器学习-P17矩阵A逆和奇异值的导数

文章目录 1. A 2 A^2 A2关于时间的导数2. 奇异值 σ \sigma σ 关于时间的导数3. 迭代特征值3.1 交替特征值3.2 ST 矩阵最大特征值 4. 瑞利商的思考4.1 瑞利商的定义4.2 性质1 1. A 2 A^2 A2关于时间的导数 我们在已知 d A d t \frac{\mathrm{d}A}{\mathrm{d}t} dtdA​的情…

Apriori 处理ALLElectronics事务数据

通过Apriori算法挖掘以下事务集合的频繁项集&#xff1a; 流程图 代码 # 导入必要的库 from itertools import combinations# 定义Apriori算法函数 def apriori(transactions, min_support, min_confidence):# 遍历数据&#xff0c;统计每个项的支持度 item_support {}for tr…

AI数据分析:根据时间序列数据生成动态条形图

动态条形竞赛图&#xff08;Bar Chart Race&#xff09;是一种通过动画展示分类数据随时间变化的可视化工具。它通过动态条形图的形式&#xff0c;展示不同类别在不同时间点的数据排名和变化情况。这种图表非常适合用来展示时间序列数据的变化&#xff0c;能够直观地显示数据随…

移动端vue+vant4选择日期+时间,返回结果是:2024-07-23 10:27格式

环境&#xff1a;vue3、 vant4、vite <van-popup v-model:show"showPicker" round position"bottom"><van-picker-grouptitle"预约日期":tabs"[选择日期, 选择时间]"next-step-text"下一步"confirm"onConfir…

亚马逊卖家注册业务类型怎么选?VC账号能申请?

在亚马逊卖家注册时&#xff0c;业务类型的选择是非常重要的&#xff0c;因为它将直接影响您的销售策略、费用结构以及您在平台上的权限。目前&#xff0c;亚马逊主要的卖家业务类型包括专业卖家和个人卖家&#xff0c;而VC&#xff08;Vendor Central&#xff09;账号和VE&…

Camtasia2024中文版最新电脑录屏剪辑神器!

大家好&#xff0c;今天我要安利一个我最近超级喜欢的工具——Camtasia2024中文版&#xff01;这款软件真的太棒了&#xff0c;它让我的视频编辑工作变得更加轻松和高效。如果你也对视频制作感兴趣&#xff0c;那么一定要尝试一下这款神器哦&#xff01; Camtasia2024win-正式…

那在中国,版权保护方面还有哪些缺陷?能否运用区块链技术解决?

目录 一、主要缺陷 1. 版权确权困难 2. 侵权行为难以追踪 3. 维权难度大 4. 中介机构效率低下 5. 盗版问题严重 二、 区块链技术的具体应用 1. 版权确权与存证 2. 智能合约 3. 作品追踪与溯源 4. 分布式存储 5. 数字身份认证 三、 结论 中国在版权保护方面虽然已经…

动态规划02(Leetcode62、63、343、96)

参考资料&#xff1a; https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84.html 62. 不同路径 题目描述&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移…

VBA:demo大全

VBA常用小代码合集&#xff0c;总有一个是您用得上的~ (qq.com) 如何在各个分表创建返回总表的命令按钮&#xff1f; 今天再来给大家聊一下如何使用VBA代码&#xff0c;只需一键&#xff0c;即可在各个分表生成返回总表的按钮。 示例代码如下&#xff1a; Sub Mybutton()Dim …

NeRF从入门到放弃3: EmerNeRF

https://github.com/NVlabs/EmerNeRF 该方法是Nvidia提出的&#xff0c;其亮点是不需要额外的2D、3Dbox先验&#xff0c;可以自动解耦动静field。 核心思想&#xff1a; 1. 动、静filed都用hash grid编码&#xff0c;动态filed比静态多了时间t&#xff0c;静态的hash编码输入是…

数据虚拟化、Data Fabric(数据编织)的兴起,对数据管理有何帮助?

数字化时代&#xff0c;虚拟化&#xff08;Virtualization&#xff09;并不是一个很陌生的词汇&#xff0c;它是现代数据中心资源管理的核心技术之一&#xff0c;是对 IT 资源&#xff08;如服务器、存储设备、网络设备等&#xff09;的抽象&#xff0c;通过屏蔽 IT 资源的物理…

shell expr功能详解

expr命令可以实现数值运算、数值或字符串比较、字符串匹配、字符串提取、字符串长度计算等功能。它还具个特殊功能&#xff0c;判断变量或参数是否为整数、是否为空、是否为0等。 1.字符串表达式 ------------------------- expr支持模式匹配和字符串操作。字符串表达式的优先…

AttributeError: ‘AlexNet‘ object has no attribute ‘module‘

当你尝试执行 model model.module 并收到错误消息 AttributeError: AlexNet object has no attribute module&#xff0c;这意味着你正在操作的模型对象&#xff08;在这个例子中是 AlexNet 类的一个实例&#xff09;并没有 module 这个属性。这个错误通常发生在以下几种情况&…

长度单位对比(英制和通用制)

0 Preface/Forewod 1 单位换算 1.1 英制单位 常见的英制长度单位如下&#xff1a; inch&#xff0c;英尺foot&#xff0c;英寸mile &#xff0c;英里 1.2 换算公式 1 inch 2.54 cm 1 yard 3 inch 1 foot 12 inch 12 * 2.54 cm 30.48 cm 1 foot 4 yard 1 mile …

Hutool工具简单用法

1、安装(POM) <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.16</version> </dependency> 2、使用 1、DateUtil //当前时间 Date date DateUtil.date(); //…