Linux学习——UDP

编程的整体框架

bind:绑定服务器:TCP地址和端口号
receivefrom():阻塞等待客户端数据
sendto():指定服务器的IP地址和端口号,要发送的数据
        无连接尽力传输,UDP:是不可靠传输
        实时的音视频传输,DNS域名解析包

服务端编写

step1:socket

int socket(int domain,int type,int protocol);
参数domainAF_INETAF_INET6AF_UNIX,AF_LOCALAF_NETLINKAF_PACKET
typeSOCK_STREAM: 流式套接字,唯一对应于TCPSOCK_DGRAM:数据报套接字,唯一对应着UDPSOCK_RAW:原始套接字
protocol一般填0,原始套接字编程时需填充
返回值成功返回文件描述符出错返回-1

step2:addr

int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);

sockfd
通过socket()创建的套接字文件描述符,例如int sockfd = socket(AF_INET, SOCK_STREAM, 0);2level
选项的协议层级,常见值:
SOL_SOCKET:通用套接字层级(如SO_REUSEADDR)
IPPROTO_TCP:TCP协议层级(如TCP_NODELAY)
IPPROTO_IP:IP协议层级(如IP_TTL)optname
具体选项名称,常用选项:
SO_REUSEADDR:允许地址复用(解决bind时的Address already in use问题)
SO_RCVTIMEO:设置接收超时时间
SO_SNDBUF:调整发送缓冲区大小optval
选项值的指针,类型根据选项不同而变化:
布尔值:int reuse = 1;
时间结构:struct timeval timeout = {5, 0};(5秒超时)
缓冲区大小:int buf_size = 8192;optlen
选项值的字节长度,例如sizeof(reuse)

step3:bind,错误返回-1

定义结构体

清空结构体

填充

调用bind函数

sockaddr_in创建的是网络字节序

主机字节序到网络字节序
u_long htonl(u_long hostlong);
u_short htons(u_short short);

step4:while中revcform

  • sockfd:需要读取的套接字描述符。
  • buf:数据读取到的缓冲区的指针。
  • len:buf的最大长度。
  • flags:一组影响函数行为的标志位。
  • src_addr:一个指向源地址结构的指针。
  • addrlen:一个指向源地址结构长度的指针。

成功时返回接收的字节数,失败时返回-1

失败返回-1

需要将获取的网络字节序转换成字符串

将32位网络字节序二进制地址转换成点分十进制的字符串
inet_pton()int inet_pton(int af, const char* src ,void* dst)将IPV4/IPV6 的地址转换成binary格式使用于IPV4/IPV6能正确处理255.255.255.255的转换问题参数:1.地址协议族(AF_INET或AF_INET6)2.src:是一个指针(填写分点形式的IP地址(主要指IPV4))dst:转换的结果给到dst

我们是接收,用的是下面的

inet_ntop(int af,const void *src,char *dst,socklen_t size)
    把ipv4和ipv6的网络字节序变成本地的字符串形式的IP地址
参数
    1.af:地址协议族(AF_INET或AF_INET6)
    2.src:是一个指针(32),(结构体里内容)
    3.dst:输出结果为32位点分形式的IP地址
    4.size:长度

成功返回非零

客户端编写

客户端是需要传参进去的,main就需要带参数

进行判断传参格式是否正确

使用socket函数,判断是都成功

成功之后将键盘输入的端口好转型为int给到定义的port

之后编写结构体(bind函数那部分内容)

while循环键盘输入内容

下面是sendto()函数知识点

头文件:#include < sys/types.h >
头文件:#include < sys/socket.h >int sendto ( socket s , const void * msg, int len, unsigned int flags,const struct sockaddr * addr , int tolen ) ;函数说明:sendto() 用来将数据由指定的socket传给对方主机。参数说明:s:已建好连接的socket,如果利用UDP协议则不需经过connect操作。msg:待发送数据的缓冲区len:缓冲区长度flags:调用方式标志位, 一般为0, 改变flags,将会改变sendto发送的形式。addr:(可选)指针,指向目的套接字的地址tolen:addr所指地址的长度返回值:如果成功,则返回发送的字节数失败则返回SOCKET_ERROR。

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

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

相关文章

ReAct Agent 实战:基于DeepSeek从0到1实现大模型Agent的探索模式

写在前面:动态思考,边想边做 大型语言模型(LLM)的崛起开启了通用人工智能(AGI)的无限遐想。但要让 LLM 从一个被动的“文本生成器”转变为能够主动解决问题、与环境交互的智能体(Agent),我们需要赋予它思考、行动和学习的能力。ReAct (Reason + Act) 框架正是实现这一…

从物理到预测:数据驱动的深度学习的结构化探索及AI推理

在当今科学探索的时代&#xff0c;理解的前沿不再仅仅存在于我们书写的方程式中&#xff0c;也存在于我们收集的数据和构建的模型中。在物理学和机器学习的交汇处&#xff0c;一个快速发展的领域正在兴起&#xff0c;它不仅观察宇宙&#xff0c;更是在学习宇宙。 AI推理 我们…

结合地理数据处理

CSV 文件不仅可以存储表格数据&#xff0c;还可以与地理空间数据结合&#xff0c;实现更强大的地理处理功能。例如&#xff0c;你可以将 CSV 文件中的坐标数据转换为点要素类&#xff0c;然后进行空间分析。 示例&#xff1a;将 CSV 文件中的坐标数据转换为点要素类 假设我们有…

SpringBoot中6种自定义starter开发方法

在SpringBoot生态中,starter是一种特殊的依赖,它能够自动装配相关组件,简化项目配置。 自定义starter的核心价值在于: • 封装复杂的配置逻辑,实现开箱即用 • 统一技术组件的使用规范,避免"轮子"泛滥 • 提高开发效率,减少重复代码 方法一:基础配置类方式 …

滚珠导轨松动会导致哪些影响?

直线导轨用于高精度或快速直线往复运动场所&#xff0c;且能够担负一定的扭矩&#xff0c;在高负载的情况下实现高精度的直线运动。它主要由导轨和滑块组成&#xff0c;其中导轨作为固定元件&#xff0c;滑块则在其上进行往复直线运动。但是滚珠导轨松动会导致哪些影响&#xf…

从零开始搭建Django博客②--Django的服务器内容搭建

本文主要在Ubuntu环境上搭建&#xff0c;为便于研究理解&#xff0c;采用SSH连接在虚拟机里的ubuntu-24.04.2-desktop系统搭建&#xff0c;当涉及一些文件操作部分便于通过桌面化进行理解&#xff0c;通过Nginx代理绑定域名&#xff0c;对外发布。 此为从零开始搭建Django博客…

ZLMediaKit支持JT1078实时音视频

ZLMediaKit 对 JT1078 实时音视频协议的支持主要通过其扩展版本或与其他中间件结合实现。以下是基于搜索结果的综合分析&#xff1a; 一、ZLMediaKit 原生支持能力 开源版本的基础支持 ZLMediaKit 开源版本本身未直接集成 JT1078 协议解析模块&#xff0c;但可通过 RTP 推流功能…

Java队列(Queue)核心操作与最佳实践:深入解析与面试指南

文章目录 概述一、Java队列核心实现类对比1. LinkedList2. ArrayDeque3. PriorityQueue 二、核心操作API与时间复杂度三、经典使用场景与最佳实践场景1&#xff1a;BFS层序遍历&#xff08;树/图&#xff09;场景2&#xff1a;滑动窗口最大值&#xff08;单调队列&#xff09; …

MetaGPT智能体框架深度解析:记忆模块设计与应用实践

在AI智能体技术从单点突破迈向系统工程的关键阶段&#xff0c;MetaGPT凭借其创新的记忆架构重新定义了多智能体协作范式。本文深度解构其革命性的三级记忆系统&#xff0c;揭秘支撑10倍效能提升的知识蒸馏算法与动态上下文控制策略&#xff0c;通过企业级应用案例与性能基准测试…

集结号海螺捕鱼服务器调度与房间分配机制详解:六

本篇围绕服务器调度核心逻辑进行剖析&#xff0c;重点讲解用户连接过程、房间分配机制、服务端并发策略及常见性能瓶颈优化。适用于具备中高级 C 后端开发经验的读者&#xff0c;覆盖网络会话池、逻辑服调度器与房间生命周期管理等关键模块。 一、服务器结构概览 整体系统采用…

【电子通识】热敏打印机是怎么形成(打印)图像和文字的?

在我们身边&#xff0c;热敏打印方式常见用于装饰贴纸、便利店的小票。此外&#xff0c;物流及食品条码标签、身份证件、机票・火车票、X光片、食品日期印刷等&#xff0c;很多打印都用到了热敏打印头。 热敏打印头的蓄热层(涂釉层)上分布着一排加热元件&#xff08;发热线&…

SQL注入漏洞中会使用到的函数

目录 一、信息获取函数 1. 通用函数 2. 元数据查询&#xff08;INFORMATION_SCHEMA&#xff09; 二、字符串操作函数 1. 字符串连接 2. 字符串截取 3. 编码/解码 三、报错注入专用函数 1. MySQL 2. SQL Server 3. PostgreSQL 四、时间盲注函数 1. 通用延迟 2. 计…

车载信息安全架构 --- 汽车网络安全

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…

Linux423 删除用户

查找 上面已查过&#xff1a;无法使用sudo 新开个终端试试 之前开了一个终端&#xff0c;按照deepseek排查 计划再开一个进程 开一个终端 后强制删除时显示&#xff1a;此事将被报告

《从卷积核到数字解码:CNN 手写数字识别实战解析》

文章目录 一、手写数字识别的本质与挑战二、使用步骤1.导入torch库以及与视觉相关的torchvision库2.下载datasets自带的手写数字的数据集到本地 三、完整代码展示 一、手写数字识别的本质与挑战 手写数字识别的核心是&#xff1a;从二维像素矩阵中提取具有判别性的特征&#x…

UniOcc:自动驾驶占用预测和预报的统一基准

25年3月来自 UC Riverside、U Wisconsin 和 TAMU 的论文"UniOcc: A Unified Benchmark for Occupancy Forecasting and Prediction in Autonomous Driving"。 UniOcc 是一个全面统一的占用预测基准&#xff08;即基于历史信息预测未来占用&#xff09;和基于摄像头图…

模型量化核心技术解析:从算法原理到工业级实践

一、模型量化为何成为大模型落地刚需&#xff1f; 算力困境&#xff1a;175B参数模型FP32推理需0.5TB内存&#xff0c;超出主流显卡容量 速度瓶颈&#xff1a;FP16推理延迟难以满足实时对话需求&#xff08;如客服场景<200ms&#xff09; 能效挑战&#xff1a;边缘设备运行…

AD9253链路训练

传统方式 参考Xilinx官方文档xapp524。对于AD9253器件 - 125M采样率 - DDR模式&#xff0c;ADC器件的DCO采样时钟(500M Hz)和FCO帧时钟是中心对齐的&#xff0c;适合直接采样。但是DCO时钟不能直接被FPGA内部逻辑使用&#xff0c;需要经过BUFIO和BUFR缓冲后&#xff0c;得到s_b…

解决方案:远程shell连不上Ubuntu服务器

服务器是可以通过VNC登录&#xff0c;排除了是服务器本身故障 检查服务是否在全网卡监听 sudo ss -tlnp | grep sshd确保有一行类似 LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid...,fd3))返回无结果&#xff0c;表明系统里并没有任…

关于大数据的基础知识(四)——大数据的意义与趋势

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于大数据的基础知识&#xff08;四&a…