当前位置: 首页 > news >正文

5. C++网络编程-UDP协议的实现

UDP是无连接的。

UDP Server网络编程基本步骤

  • 创建socket,指定使用UDP协议
  • 将socket与地址和端口绑定
  • 使用recv/send接收/发送数据
    由于UDP是无连接的,直接侦听就行
  • 使用close关闭连接

在这里插入图片描述
这个UDP接收数据的时候用的API是recvfrom,发送数据是sendto

客户端

#include <sys/types.h>
#include <sys/socket.h>
#include <pthread.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <arpa/inet.h>int main(int argc, char * *argv)
{struct sockaddr_in addr;socklen_t addrlen = sizeof(addr);int sock;addr.sin_family     = AF_INET;addr.sin_port       = htons(9876);addr.sin_addr.s_addr = inet_addr("127.0.0.1");char buff_send[512] = "Hello";char buff_recv[512] = {0};int len = sizeof(addr);int n = 0;printf("This is a UDP client\n");if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0){printf("socket error.\n");exit(1);}if (addr.sin_addr.s_addr == INADDR_NONE){printf("Incorrect ip address!");close(sock);exit(1);}n = sendto(sock, buff_send, strlen(buff_send), 0, (struct sockaddr *) &addr, sizeof(addr));if (n < 0){printf("sendto error.\n");close(sock);}n = recvfrom(sock, buff_recv, 512, 0, (struct sockaddr *) &addr, &addrlen);if (n > 0){buff_recv[n] = 0;printf("received from sever:");puts(buff_recv);}else if (n == 0)printf("server closed.\n");else if (n == -1)printf("recvfrom error.\n");close(sock);return 0;
}

服务器端

#include <sys/types.h>
#include <sys/socket.h>
#include <pthread.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <arpa/inet.h>int main(int argc, char * *argv)
{struct sockaddr_in addr;addr.sin_family     = AF_INET;addr.sin_port       = htons(9876);addr.sin_addr.s_addr = INADDR_ANY;char buff_recv[512] = {0};char buff_send[512] = "world";struct sockaddr_in clientAddr;socklen_t addrlen = sizeof(clientAddr);int n;int len = sizeof(clientAddr);int sock;printf("Welcome! This is a UDP server.\n");if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0){printf("socket error.\n");exit(1);}if (bind(sock, (struct sockaddr *) &addr, sizeof(addr)) < 0){printf("bind error.\n");exit(1);}while (1){//ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);n = recvfrom(sock, (void *)buff_recv, 511, 0, (struct sockaddr *) &clientAddr, &addrlen);if (n > 0){buff_recv[n] = 0;printf("recv data from client:%s %u says: %s\n", inet_ntoa(clientAddr.sin_addr), ntohs(clientAddr.sin_port), buff_recv);n = sendto(sock, (void *)buff_send, n, 0, (struct sockaddr *) &clientAddr, sizeof(clientAddr));if (n < 0){printf("sendto error.\n");break;}else {printf("recv error.\n");break;}}}return 0;
}

在这里插入图片描述

相关文章:

5. C++网络编程-UDP协议的实现

UDP是无连接的。 UDP Server网络编程基本步骤 创建socket&#xff0c;指定使用UDP协议将socket与地址和端口绑定使用recv/send接收/发送数据 由于UDP是无连接的&#xff0c;直接侦听就行使用close关闭连接 这个UDP接收数据的时候用的API是recvfrom,发送数据是sendto 客户端 …...

Altium Designer 中键拖动,滚轮缩放,并修改缩放速度

我的版本是AD19&#xff0c;其他版本应该都一样。 滚轮缩放 首先&#xff0c;要用滚轮缩放&#xff0c;先要调整一下AD 设置&#xff0c;打开Preferences&#xff0c;在Mouse Wheel Configuration 里&#xff0c;把Zoom Main Window 后面Ctrl 上的对勾取消掉&#xff0c;再把…...

python从入门到精通04

一、编写英文月份词典 month_num int(input("请输入您想要查询的月份&#xff1a;")) month_list [January,February,March,April,May,June,July,August,September,October,November,December] print("您查询的月份单词是&#xff1a;", month_list[mon…...

tomcat三级指导

版本 ./catalina.sh linux version.bat win 1.确认是否使用了tomcat管理后台 我们先找到配置文件&#xff1a;tomcat主目录下/conf/server.xml 可以查看到连接端口&#xff0c;默认为8080 然后查看manager-gui管理页面配置文件&#xff0c;是否设置了用户登录 配置文件…...

不知道是该怎么引用多个函数片段?具体示例如代码

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…...

P3128 [USACO15DEC] Max Flow P题解(树上差分,最近公共祖先,图论)

前言&#xff1a; 题目链接&#xff1a;P3128 [USACO15DEC] Max Flow P - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 讲解&#xff1a; 这一题含金量真算高的&#xff0c;包含了建树&#xff08;用了图论的知识&#xff09;&#xff0c;求最近公共祖先&#xff08;倍增法…...

在Linux上面部署ELK

注明&#xff1a;一下的软件需要自己准备 一、准备环境&#xff1a; 1.两台elasticsearch主机4G内存 2.两台elasticsearch配置主机名node1和node2(可以省略) #vim /etc/hostname #reboot 3. 两台elasticsearch配置hosts文件 #vim /etc/hosts 192.168.1.1 node1 192…...

Langchain-Chatchat的markdownHeaderTextSplitter使用

文章目录 背景排查步骤官方issue排查测试正常对话测试官方默认知识库Debug排查vscode配置launch.json命令行自动启动condadebug知识库搜索测试更换ChineseRecursiveTextSplitter分词器 结论 关于markdownHeaderTextSplitter的探索标准的markdown测试集Langchain区分head1和head…...

掩码生成蒸馏——知识蒸馏

摘要 https://arxiv.org/pdf/2205.01529 知识蒸馏已成功应用于各种任务。当前的蒸馏算法通常通过模仿教师的输出来提高学生的性能。本文表明&#xff0c;教师还可以通过指导学生的特征恢复来提高学生的表示能力。从这一观点出发&#xff0c;我们提出了掩码生成蒸馏&#xff08…...

【C#实战】Newtonsoft.Json基类子类解析

情景再现 假设你有如下类&#xff1a; public class Item {public int Id;public string Name; }public class Weapon: Item {public int CurrentAmmo; }public class Inventory {public List<Item> Items; } 其中你序列化的是Inventory类&#xff0c;Items列表里混杂着…...

表达式求值的相关语法知识(C语言)

目录 整型提升 整型提升的意义 整型提升规则 整型提升实例 算术转换 赋值转换 操作符的属性 C语言的语法并不能保证表达式的执行路径唯一&#xff01;&#xff01;&#xff01; 问题表达式 整型提升 C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这…...

开发中遇到Electron自定义窗口的问题

开发中遇到Electron自定义窗口的问题 使用VUE3 Electron 开发一个音乐软件&#xff0c;自定义导航栏的放大、缩小和关闭。 其中使用ipcRenderer进行联系Electron&#xff0c;进行放大、缩小和关闭操作。 遇到问题 遇到__dirname is not defined in ES module scope //在V…...

c# sqlite使用

安装包 使用 const string strconn "Data Sourcedata.db"; using (SQLiteConnection conn new SQLiteConnection(strconn)) {conn.Open();var cmd conn.CreateCommand();cmd.CommandText "select 1";var obj cmd.ExecuteScalar();MessageBox.Show(ob…...

39、Flink 的窗口剔除器(Evictors)详解

Evictors Flink 的窗口模型允许在 WindowAssigner 和 Trigger 之外指定可选的 Evictor&#xff0c;通过 evictor(...) 方法传入 Evictor。 Evictor 可以在 trigger 触发后、调用窗口函数之前或之后从窗口中删除元素&#xff0c; Evictor 接口提供了两个方法实现此功能&#x…...

Flutter 中的 DefaultTabController 小部件:全面指南

Flutter 中的 DefaultTabController 小部件&#xff1a;全面指南 在Flutter中&#xff0c;DefaultTabController是一个用于管理Tab控制器的widget&#xff0c;它允许你控制Tab视图的初始索引和动态更新。这个组件在实现具有可滚动标签页的界面时非常有用&#xff0c;例如在设置…...

C++技能进阶指南——多态语法剖析

前言&#xff1a;多态是面向对象的三大特性之一。顾名思义&#xff0c; 多态就是多种状态。 那么是什么的多种状态呢&#xff1f; 这里的可能有很多。比如我们去买火车票&#xff0c; 有普通票&#xff0c; 学生票&#xff1b; 又比如我们去旅游&#xff0c; 有儿童票&#xff…...

Linux内存管理--系列文章肆

一、引子 上篇文章介绍了目标文件&#xff0c;也就是讲到编译过程中的汇编这个阶段。本篇要讲目标文件怎么变成一个可执行文件的&#xff0c;介绍编译过程中的链接。 链接主要分为两种&#xff0c;静态链接和动态链接。它们本质上的区别&#xff0c;是在程序的编译和运行过程中…...

kali下载zsteg和stegpy

1.kali下载zsteg 从 GitHub 上克隆zsteg到kali git clone https://github.com/zed-0xff/zsteg 切换目录 cd zsteg 用于安装名为 zsteg 的 Ruby Gem 包 gem install zsteg 2.kali下载stegpy 下载网站内的stegpy-master压缩包GitCode - 开发者的代码家园 并拉到kali中 切换到s…...

前端面试题日常练-day34 【面试题】

题目 希望这些选择题能够帮助您进行前端面试的准备&#xff0c;答案在文末。 1. jQuery中&#xff0c;以下哪个选项用于筛选出第一个匹配的元素&#xff1f; a) first() b) get(0) c) eq(0) d) find(":first") 2. 在jQuery中&#xff0c;以下哪个选项用于在元素上…...

网站笔记:huggingface model memory calculator

Model Memory Utility - a Hugging Face Space by hf-accelerate 这个工具可以计算在 Hugging Face Hub上托管的大型模型训练和执行推理时所需的vRAM内存量。模型所需的最低推荐vRAM内存量表示为“最大层”的大小&#xff0c;模型的训练大约是其大小的4倍&#xff08;针对Adam…...

前端新手天天踩坑?安全老兵带你彻底搞懂HTML“路径引用”与“跳转陷阱”(附实战代码)

我平时在做代码审计和渗透测试时,经常会碰到一类让人哭笑不得的低级Bug:本地测试好好的图片,一部署到服务器上就全部裂开;别人点击网页上的链接,直接报404找不到页面。 这些问题归根结底,都是因为新手没有彻底搞懂 HTML 的**路径(Path)和锚点(Anchor)**规则。很多同…...

VSCode Remote SSH 一直转圈连不上服务器?踩坑全记录

VSCode Remote SSH 一直转圈连不上服务器&#xff1f;踩坑全记录环境&#xff1a;Ubuntu 服务器 / VSCode Remote SSH / Miniconda问题描述 VSCode 通过 Remote SSH 连接服务器时&#xff0c;一直显示"正在连接"&#xff0c;转圈转个没完&#xff0c;既不报错也不成功…...

GLM-OCR模型开箱即用体验:CSDN星图GPU平台一键部署

GLM-OCR模型开箱即用体验&#xff1a;CSDN星图GPU平台一键部署 最近在做一个需要批量处理图片文字识别的项目&#xff0c;传统的手动部署OCR模型&#xff0c;光是配环境、装依赖、解决版本冲突就能耗掉大半天&#xff0c;更别提还得自己搞定GPU驱动和显存分配了。正当我为此头…...

DeOldify构建AI编程工具链:自动化代码生成辅助图像处理项目

DeOldify构建AI编程工具链&#xff1a;自动化代码生成辅助图像处理项目 最近在做一个老照片修复的项目&#xff0c;核心用的是DeOldify这个效果很棒的着色模型。但在实际开发中&#xff0c;我发现一个挺有意思的问题&#xff1a;围绕DeOldify的集成和前后处理&#xff0c;其实…...

十大排序算法详解:从原理到实战,苹果群控系统游戏运营如何实现自动执行任务。

排序算法概述 排序算法是将一组数据按照特定顺序&#xff08;如升序或降序&#xff09;重新排列的算法。根据时间复杂度、空间复杂度、稳定性等特性&#xff0c;排序算法可分为比较排序和非比较排序两大类。常见算法包括冒泡排序、快速排序、归并排序、堆排序、计数排序等。比较…...

FLUX.1-dev旗舰版画质巅峰:多组高清AI绘画作品效果对比

FLUX.1-dev旗舰版画质巅峰&#xff1a;多组高清AI绘画作品效果对比 1. 光影质感革命&#xff1a;FLUX.1-dev的视觉突破 当第一次看到FLUX.1-dev生成的图像时&#xff0c;大多数人都会产生同一个疑问&#xff1a;这真的是AI画的吗&#xff1f;作为当前开源界最强的Text-to-Ima…...

zk(zookeeper)的选举机制

zk中有两种角色&#xff1a;Leader 和 Fllower&#xff0c;Leader是集群各台电脑投票选举出来的。事务【非常重要】&#xff1a;一通操作&#xff0c;要么同时成立&#xff0c;要么都不成立。LeaderZookeeper 集群工作的核心。1.事务请求&#xff08;写操作&#xff09;的唯一调…...

赋能每一份热爱,你的专属AI创作伙伴「小加同学」来了!

这个时代&#xff0c;「把热爱做成事业」很难吗&#xff1f;有深耕内容的自媒体人&#xff0c;熬到深夜写文调图&#xff0c;却总难抓住流量密码&#xff1b;有奔走忙碌的OPC创业者&#xff0c;对需求、理素材、出方案&#xff0c;被琐事消磨&#xff1b;有坚守初心的中小商家&…...

Git新手必看:5个最常用命令搞定代码拉取与分支管理(附Gerrit实战)

Git新手必看&#xff1a;5个最常用命令搞定代码拉取与分支管理&#xff08;附Gerrit实战&#xff09; 第一次接触Git时&#xff0c;面对满屏的命令行参数和陌生的概念&#xff0c;很多开发者都会感到手足无措。记得我刚入职时&#xff0c;为了提交一行代码修改&#xff0c;整整…...

工业级音频响应式分形火焰生成器:从算法到工程实践

1. 项目概述1.1 背景与动机分形火焰&#xff08;Fractal Flame&#xff09;是一种基于迭代函数系统&#xff08;IFS&#xff09;的生成艺术&#xff0c;能够产生绚丽多彩、无限复杂的图案。传统实现通常只依赖随机性&#xff0c;缺乏与外部世界的交互。音频信号作为丰富的信息源…...