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

linux网络编程之UDP编程

linux网络编程之UDP编程

  • UDP编程模型
      • 服务端
      • 客户端
    • tcp与udp的区别

UDP编程模型

服务端

1.创建socket
2.构建服务器协议地址簇
3.绑定
4. 通信

sendto(多了两个参数) == send + connect

#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <arpa/inet.h>int main(){//1. 创建socket 		int serverFd = socket(AF_INET,SOCK_DGRAM,0);if(-1  ==  serverFd) printf("创建socket失败:%m\n"),exit(-1);printf("创建socket成功!\n");				//2. 构建服务器协议地址族	struct sockaddr_in  addr = {0};addr.sin_family =   AF_INET;//和socket函数第一个参数一致addr.sin_addr.s_addr = inet_addr("192.168.249.135");//把字符串转成整型addr.sin_port = htons(9999);//端口号			//3. 绑定int r = bind(serverFd,(struct sockaddr*)&addr,sizeof addr);if(-1  ==  r) printf("绑定失败:%m\n"),close(serverFd),exit(-1);printf("绑定成功!\n");	//4. 通信char buff[256];//用来存储客户端协议地址族struct sockaddr_in  cAddr = {0};int cLen = sizeof cAddr;while(1){r = recvfrom(serverFd,buff,255,0,(struct sockaddr*)&cAddr,&cLen);//和read一样if(r>0){buff[r] = 0;//添加'\0'printf("客户端%s发来的数据>>%s\n",inet_ntoa(cAddr.sin_addr),buff);sendto(serverFd,"妖怪,吃俺老孙一棒",strlen("妖怪,吃俺老孙一棒"),0,(struct sockaddr*)&cAddr,sizeof cAddr);}}}

客户端

1.创建socket
2.获取服务器协议地址簇
3,通信
recvform(多了两个参数) == recv + accept

#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <arpa/inet.h>int main(){//1. 创建socket 		int serverFd = socket(AF_INET,SOCK_DGRAM,0);if(-1  ==  serverFd) printf("创建socket失败:%m\n"),exit(-1);printf("创建socket成功!\n");				//2. 构建服务器协议地址族	struct sockaddr_in  addr = {0};addr.sin_family =   AF_INET;//和socket函数第一个参数一致addr.sin_addr.s_addr = inet_addr("192.168.249.135");//把字符串转成整型addr.sin_port = htons(9999);//端口号			//3. 通信char buff[256];int r;char temp[256];int len = sizeof addr;while(1){memset(buff,0,256);printf("请输入>>");scanf("%s",buff);r = sendto(serverFd,buff,strlen(buff),0,(struct sockaddr*)&addr,sizeof addr);printf("r:%d\n",r);r = recvfrom(serverFd,temp,255,0,(struct sockaddr*)&addr,&len);if(r > 0){temp[r] = 0;printf("服务器说:%s\n",temp);}}}

tcp与udp的区别

1.tcp有连接 udp没有连接
2.tcp数据流, udp数据报文
3. tcp 数据有边界 , udp数据无边界
4. tcp数据有序, udp数据无序
5.tcp安全 稳定 可靠 udp不安全
安全: 相对不容易被窃取
稳定:传输速率变化
可靠:是否一定能收到
6. tcp相对慢很多,udp传输速度快
7.tcp有中心(服务器) udp没有

相关文章:

linux网络编程之UDP编程

linux网络编程之UDP编程 UDP编程模型服务端客户端 tcp与udp的区别 UDP编程模型 服务端 1.创建socket 2.构建服务器协议地址簇 3.绑定 4. 通信 sendto&#xff08;多了两个参数&#xff09; send connect #include <stdio.h> #include <sys/types.h> /*…...

YB4556 28V、1A、单节、线性锂电池充电IC

YB4556 28V 、 1A 、单节、线性锂电池充电 IC 概述: YB4556H 是一款完整的采用恒定电流 / 恒定电压的高压、大电流、单节锂离子电池线性充电 IC。最高耐压可达 28V&#xff0c;6.5V 自动过压保护&#xff0c;充电电流可达 1A。由于采用了内部 PMOSFET 架构&#xff0c;加上防倒…...

基于单片机设计的大气气压检测装置(STC89C52+BMP180实现)

一、前言 本项目设计一个大气气压检测装置&#xff0c;该装置以单片机为基础&#xff0c;采用STC89C52作为核心控制芯片&#xff0c;结合BMP180模块作为气压传感器。大气气压&#xff0c;也就是由气体重力在大气层中产生的压力&#xff0c;其变化与天气预报、气象观测以及高度…...

【ChatGLM3-6B】Docker下部署及微调

【ChatGLM2-6B】小白入门及Docker下部署 注意&#xff1a;Docker基于镜像中网盘上上传的有已经做好的镜像&#xff0c;想要便捷使用的可以直接从Docker基于镜像安装看Docker从0安装前提下载启动访问 Docker基于镜像安装容器打包操作&#xff08;生成镜像时使用的命令&#xff0…...

编程常见报错信息及解决方案汇总

编程常见报错信息及解决方案汇总 1.Java语言编程 1.1 jdk相关 Java API java8帮助文档 Java最新JDK和API下载&#xff08;持续同步更新于官网&#xff09; jdk1.8.0_212 全平台下载 官网下载JDK1.7的方法和步骤 力扣 (LeetCode) PTA题库 1.2 编程工具Eclipse Eclips…...

从Redis反序列化UserDetails对象异常后发现FastJson序列化的一些问题

最近在使用SpringSecurityJWT实现认证授权的时候&#xff0c;出现Redis在反序列化userDetails的异常。通过实践发现&#xff0c;使用不同的序列化方法和不同的fastJson版本&#xff0c;异常信息各不相同。所以特地记录了下来。 一、项目代码 先来看看我项目中redis相关配置信息…...

0001Java程序设计-springboot基于微信小程序批发零售业商品管理系统

文章目录 **摘 要****目录**系统实现开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅&#x1f427;裙&#xff1a;776871563 摘 要 本毕业设计的内容是设计并且实现一个基于微信小程序批发零售业商品管理系统。它是在Windows下&#xff0c;以MYSQL为数据库开发平台…...

中国防锈油市场深度调研与投资战略报告(2023版)

内容简介&#xff1a; 防锈油是在石油类基本组分中加入油溶性缓蚀剂及清净分散剂、抗氧抗腐剂、极压抗磨剂等辅助添加剂&#xff0c;多用于金属制品工序间、运输和贮存时的暂时防锈&#xff0c;是一种较理想、有效的防护方法&#xff0c;具有效果好、使用方便、成本低廉、易施…...

Linux C 基于tcp和epoll在线聊天室

基于tcp和epoll在线聊天室 说明服务端代码 说明 服务端&#xff1a;实现了验证用户是否已经存在&#xff08;支持最大64用户连接&#xff09;支持广播用户进入退出聊天室以及用户聊天内容。   这里只提供里服务端代码&#xff0c;如果想要看客户端代码点击这里。 服务端代码…...

为什么要隐藏id地址?使用IP代理技术可以实现吗?

随着网络技术的不断发展&#xff0c;越来越多的人开始意识到保护个人隐私的重要性。其中&#xff0c;隐藏自己的IP地址已经成为了一种常见的保护措施。那么&#xff0c;为什么要隐藏IP地址&#xff1f;使用IP代理技术可以实现吗&#xff1f;下面就一起来探讨这些问题。 首先&am…...

前端(HTML + CSS + JS)

文章目录 一、HTML1. 概念&#xff08;1&#xff09;HTML 文件基本结构&#xff08;2&#xff09;HTML代码框架 2. 、HTML常见标签 二、CSS1. CSS基本语法规范2. 用法&#xff08;1&#xff09; 引用方式&#xff08;2&#xff09;选择器&#xff08;3&#xff09;常用元素属性…...

12 要素 12 Factor

I. 基准代码 一份基准代码&#xff0c;多份部署 一个应用&#xff0c;一个基准代码git仓库&#xff0c;多个环境版本部署&#xff08;prod&#xff0c;staging&#xff0c;develop&#xff09; II. 依赖 显式声明依赖关系 docker的dockerfile&#xff0c;php的composer.jso…...

十大排序之冒泡排序与快速排序(详解)

文章目录 &#x1f412;个人主页&#x1f3c5;算法思维框架&#x1f4d6;前言&#xff1a; &#x1f380;冒泡排序 时间复杂度O(n^2)&#x1f387;1. 算法步骤思想&#x1f387;2.动画实现&#x1f387; 3.代码实现&#x1f387;4.代码优化&#xff08;添加标志量&#xff09; …...

【SpringBoot篇】阿里云OSS—存储文件的利器

文章目录 &#x1f339;什么是阿里云OSS⭐阿里云OSS的优点 &#x1f3f3;️‍&#x1f308;为什么要使用云服务OSS&#x1f384;使用步骤⭐OSS开通⭐参考官方SDK &#x1f354;编写代码⭐上传文件 &#x1f339;综合案例 &#x1f339;什么是阿里云OSS 阿里云对象存储&#xf…...

Leetcode—58.最后一个单词的长度【简单】

2023每日刷题&#xff08;四十&#xff09; Leetcode—58.最后一个单词的长度 实现代码 int lengthOfLastWord(char* s) {int len strlen(s);int left 0, right 0;if(len 1) {return 1;}while(right < len) {if(right 1 < len) {if(s[right] && s[righ…...

Apach Ozone部署

前言 最近由于工作需要&#xff0c;要部署一套ozone。我自己对hadoop这套体系不是很熟悉&#xff0c;所以过程磕磕碰碰&#xff0c;好不容易勉强搭起来&#xff0c;所以记录一下部署方式 准备 三台主机&#xff0c;主机均已安装jdk、hdfs&#xff0c;相关的安装配置就不另外写…...

【nlp】3.2 Transformer论文复现:1. 输入部分(文本嵌入层和位置编码器)

Transformer论文复现:输入部分(文本嵌入层和位置编码器) 1 输入复现1.1 文本嵌入层1.1.1 文本嵌入层的作用1.1.2 文本嵌入层的代码实现1.1.3 文本嵌入层中的注意事项1.2 位置编码器1.2.1 位置编码器的作用1.2.2 位置编码器的代码实现1.2.3 位置编码器中的注意事项1 输入复现…...

自动化部署 / 扩容openGauss —— Ansible for openGauss

前言 大家好&#xff0c;今天我们为大家推荐一套基于 Ansible 开发的&#xff0c;自动化部署及扩容 openGauss 的脚本工具&#xff1a;Ansible for openGauss&#xff08;以下简称 AFO&#xff09;。 通过AFO&#xff0c;我们只需简单修改一些配置文件&#xff0c;即可快速部署…...

Go 实现网络代理

使用 Go 语言开发网络代理服务可以通过以下步骤完成。这里&#xff0c;我们将使用 golang.org/x/net/proxy 包来创建一个简单的 SOCKS5 代理服务作为示例。 步骤 1. 安装 golang.org/x/net/proxy 包 使用以下命令安装 golang.org/x/net 包&#xff0c;该包包含 proxy 子包&am…...

Redis报错:JedisConnectionException: Could not get a resource from the pool

1、问题描述&#xff1a; redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool 2、简要分析&#xff1a; redis.clients.util.Pool.getResource会从JedisPool实例池中返回一个可用的redis连接。分析源码可知JedisPool 继承了 r…...

开源数据集TN3K实测:手把手复现甲状腺结节分割SOTA模型(附避坑指南)

TN3K数据集实战&#xff1a;从零构建甲状腺结节分割多任务模型 医疗影像分析领域近年来迎来爆发式增长&#xff0c;其中甲状腺结节自动分割技术因其在癌症早期筛查中的关键作用备受关注。去年发布的TN3K开源数据集为研究者提供了宝贵资源&#xff0c;但实际应用时仍面临数据异构…...

Switch模拟器:Ryujin模拟器教程

下载配置模拟器前需要先安装游戏运行库&#xff0c;显卡驱动正常 龙神模拟器官网&#xff1a;https://ryujinx.org/ switch模拟器的区别 Ryujinx【龙神模拟器】兼容性更好&#xff0c;刚出来的游戏也能运行&#xff0c;但由于它以前只支持OpenGL&#xff0c;所以帧率较低&am…...

集成学习方法解析:Bagging与Boosting原理与实践

1. 集成学习方法概述&#xff1a;为什么需要模型组合&#xff1f;在机器学习实践中&#xff0c;我们常常面临一个关键矛盾&#xff1a;单一模型往往难以同时满足高准确性和强泛化能力的需求。这就好比医疗诊断中&#xff0c;单个专家的意见可能受限于其专业背景&#xff0c;而多…...

不花一分冤枉米!MedPeer科研工具最优解

打开会员页面十几款套餐摆面前&#xff0c;不知道哪款匹配自己的需求&#xff0c;怕买错了浪费钱&#xff0c;买便宜了又不够用&#xff1f;作为一直在用MedPeer的老科研人&#xff0c;我整理了这篇全套餐梳理&#xff0c;帮不同需求、不同领域的科研人快速选到最划算的那一款&…...

2026最权威的十大降AI率助手解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 如今&#xff0c;好多 AI 生成内容检测工具越来越常见&#xff0c;致使原创文本要是带有明显…...

飞书表格API避坑指南:从‘sheet=’乱码到批量插入行列,我踩过的坑都在这了

飞书表格API深度排雷手册&#xff1a;那些官方文档没告诉你的细节 第一次调用飞书表格API时&#xff0c;我天真地以为照着官方文档就能轻松搞定。直到在凌晨三点的办公室里&#xff0c;对着满屏的400错误码和乱码sheet名&#xff0c;才意识到自己掉进了多少坑。这份手册记录了…...

GD32选型不再纠结:5分钟用官方工具找到最适合你项目的MCU(附实战案例)

GD32选型实战指南&#xff1a;5步精准匹配工业级MCU方案 打开兆易创新官网的产品搜索器页面&#xff0c;工程师们常会面对370余款GD32型号陷入选择困难——主频从48MHz到240MHz不等&#xff0c;Flash容量覆盖16KB到3072KB&#xff0c;外设组合更是千差万别。去年为某工业网关项…...

告别“黑盒”:用Vector Davinci工具链手把手配置你的第一个AUTOSAR SWC

从零构建AUTOSAR车窗控制器&#xff1a;Vector Davinci工具链实战指南 第一次打开Vector Davinci Configurator时&#xff0c;满屏的AUTOSAR术语让人仿佛面对着一堵密不透风的技术高墙。作为在汽车电子行业深耕多年的工程师&#xff0c;我完全理解这种手足无措的感觉——AUTOSA…...

MinerU 系列教程 第十八课:Magic Model 转换层详解

MinerU 系列教程 第十八篇 本篇教程作为 模块五:原理篇 - 数据流与中间格式 的第二课,将深入剖析 MinerU 的 Magic Model 转换层。每种后端都有一个专属的 Magic Model,负责将各自的原始输出标准化为上一课学习的 Middle JSON 块结构。本课将揭示四个版本的 Magic Model 在块…...

Layui表单提交时如何防止用户重复点击提交按钮

提交按钮点击后应立即禁用并修改提示文字&#xff0c;验证通过后再发请求&#xff0c;AJAX全程保持禁用状态&#xff0c;成功或失败后均需恢复按钮&#xff0c;移动端需在touchstart阶段拦截&#xff0c;且禁用仅限按钮本身以免跳过layui校验。提交按钮点击后立刻禁用用户手快连…...