网络 协议 UDP编程
网络:数据传输,数据共享
1.网络协议模型:
OSI协议模型
应用层 实际发送的数据
表示层 发送的数据是否加密
会话层 是否建立会话连接
传输层 数据传输的方式(数据报、流式)
网络层 数据的路由(如何从一个局域网到达另一个局域网) IP地址
数据链路层 局域网下如何通信
物理层 物理介质的连接
TCP/IP协议模型
应用层 传输的数据
传输层 传输的方式
网络层 数据如何从一台主机到达另一台主机
网络接口层 物理介质的连接
应用层:
HTTP 超文本传输协议
HTTPS
FTP 文件传输协议
TFTP 简单文本传输协议
SMTP 邮件传输协议
MQTT
TELNET
..
传输层:
UDP 用户数据报协议
特点:
1.实现机制简单
2.资源开销小
3.不安全不可靠
TCP 传输控制协议
特点:
1.实现机制复杂
2.资源开销大
3.安全可靠
网络层:
IPv4
IP地址:唯一标识网络中一台主机的标号
IP地址:网络位 + 主机位
子网掩码:用来标识IP地址的网络位和主机位
子网掩码是1的部分表示IP地址的网络位
子网掩码是0的部分表示IP地址的主机位
网段号:网络位不变,主机位全为0,表示网段号
广播地址:网络位不变,主机位全为1,表示广播地址
IP地址类型:
A类
1.0.0.0 - 126.255.255.255
子网掩码:255.0.0.0
管理超大规模网络
10.0.0.0 - 10.255.255.255
B类
128.0.0.0 - 191.255.255.255
子网掩码:255.255.0.0
管理大中规模型网络
172.16.0.0 - 172.31.255.255
C类
192.0.0.0 - 223.255.255.255
子网掩码:255.255.255.0
管理中小规模型网络
192.168.0.0 - 192.168.255.255
D类
224.0.0.0 - 239.0.0.0
用于组播
E类
240.0.0.0 - 255.255.255.255
用于实验
2.UDP编程
socket套接字编程:
1.发端:
socket
int socket(int domain, int type, int protocol);
功能:
创建一个用来通信的文件描述符
参数:
domain:使用的协议族 AF_INET (IPv4协议族)
type:套接字类型
SOCK_STREAM:流式套接字
SOCK_DGRAM:数据报套接字
SOCK_RAW:原始套接字
protocol:协议
默认为0
返回值:
成功返回文件描述符
失败返回-1
sendto
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
功能:
利用套接字向指定地址发送数据信息
参数:
sockfd:套接字文件描述符
buf:发送数据空间首地址
len:发送数据的长度
flags:属性默认为0
dest_addr:目的地址信息存放的空间首地址
addrlen:目的地址的长度
struct sockaddr_in {
sa_family_t sin_family; /* address family: AF_INET */
in_port_t sin_port; /* port in network byte order */
struct in_addr sin_addr; /* internet address */
};
/* Internet address. */
struct in_addr {
uint32_t s_addr; /* address in network byte order */
};
返回值:
成功返回实际发送字节数
失败返回-1
inet_addr:
in_addr_t inet_addr(const char *cp);
功能:
将字符串IP地址转换为内存中的IP地址
htons
uint16_t htons(uint16_t hostshort);
功能:
将本地字节序转换为网络的大端字节序
close
收端 1.recvfrom
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
功能:
从套接字中接收数据
参数:
sockfd:套接字文件描述符
buf:存放数据空间首地址
flags:属性 默认为0
src_addr:存放IP地址信息的空间首地址
addrlen:存放接收到IP地址大小空间的首地址
返回值:
成功返回实际接收字节数
失败返回-1
UDP编程:
UDP编程:
发端:socket -> sendto -> close
收端: socket -> bind -> recvfrom -> close
练习:
编写程序实现两台主机间传输一个文件
./recv
./send
a.txt
4.UDP需要注意的细节点:
1.UDP是无连接,发端退出,收端没有任何影响
2.UDP发送数据上限,最好不要超过1500个字节
3.UDP是不安全不可靠的,连续且快速的传输数据容易产生数据丢失
5.wireshark
抓包工具
操作流程:
1.sudo wireshark
打开wireshark抓包工具
2.选择抓取数据包的网卡
any
3.执行通信的代码
4.停止通信
5.设定过滤条件
ip.addr == IP地址
udp
tcp
udp.port == 端口
=========UDP简单==========
6.UDP包头长度:8个字节 |
源端口号(2个字节) |
目的端口号(2个字节)|
长度(2个字节) |
校验和(2个字节) |
==========================
TCP通信:
TCP发端:
socket
connect
send
recv
close
TCP收端:
socket
bind
listen
accept
send
recv
close
1.connect
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
功能:
发送链接请求
参数:
sockfd:套接字文件描述符
addr:目的地址存放空间首地址
addrlen:IP地址的大小
返回值:
成功返回0
失败返回-1
2.send
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
功能:
发送数据
参数:
sockfd:文件描述符
buf:发送数据空间首地址
len:发送数据的长度
flags:属性默认为0
返回值:
成功返回实际发送字节数
失败返回-1
3.recv
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
功能:
接收数据
参数:
sockfd:套接字文件描述符
buf:存放数据空间首地址
len:最大接收数据的长度
flags:属性默认为0
返回值:
成功返回实际接收字节数
失败返回-1
如果对方退出,返回0
4.listen
int listen(int sockfd, int backlog);
功能:
监听客户端发送的连接请求
该函数不会阻塞
参数:
sockfd:套接字文件描述符
backlog:允许等待的尚未被处理的三次握手请求的最大个数
返回值:
成功返回0
失败返回-1
5.accept
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
功能:
处理等待连接队列中的第一个连接请求
该函数具有阻塞功能(如果没有人发送链接请求,会阻塞等待)
参数:
socket:套接字文件描述符
address:存放IP地址的空间首地址
addrlen:存放IP地址大小空间首地址
返回值:
成功返回一个新的文件描述符
失败返回-1
相关文章:
网络 协议 UDP编程
网络:数据传输,数据共享 1.网络协议模型: OSI协议模型 应用层 实际发送的数据 表示层 发送的数据是否加密 会话层 是否建立会话连接 传输层 数据传输的方式(数据报、流式)…...

3505. 这也是一道排序题
一、题目 输入 10 7334774857 8461862436 540886577 5245195052 9194400521 5412986878 6694133363 1186771950 1405713915 7115286932 输出 -29430338967 二、思考 构造差分数组:C[i] A[i1] - A[i] 由题目条件可知:当A[i] A[i1] A[i-1] - A[i]时&am…...

【Redis】Redis的应用场景
📝个人主页:五敷有你 🔥系列专栏:Redis ⛺️稳中求进,晒太阳 Redis的应用场景: 限流 要求10s内只能访问一次 RequestMapping("xian")public String xianLiu(String sign){String sign1 …...

计算机网络—以太网接口和链路配置
目录 1.拓扑图 2.以太网交换机基础配置 3.配置手动模式的链路聚合 4.配置静态 LACP 模式的链路聚合 5.配置文件 1.拓扑图 2.以太网交换机基础配置 华为交换机接口默认开启了自协商功能,需要手动配置S1与 S2上G0/0/9和G0/0/10接口的速率。 首先修改交换机的设…...
关于做副业、做自媒体:说几句扎心的话
今天在某乎看到一个问题:想尝试自媒体,想了一个月了,都没想好怎么起步,咋整呀? 恰好昨天陪退休老妈去探店,有感而发,就来唠一唠。 一、退休老妈的副业经历 老妈去年年初开始,在某…...
精通SpringBoot单元测试
引言 单元测试是软件开发中不可或缺的一部分,它对保障代码质量和软件的可靠性起着至关重要的作用。而SpringBoot作为一个流行的Java框架,为开发高效、易于部署的微服务提供了强大的支持。 单元测试的重要性: 确保代码正确性:通过…...

HAProxy 简单介绍
一 HAProxy介绍 (一)发展历史 HAProxy是法国开发者威利塔罗(Willy Tarreau)在2000年使用C语言开发的一个开源软件,是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换…...
SpringBoot集成Swagger3.0
一:前言 Swagger 是一个 RESTful API 的开源框架,它的主要目的是帮助开发者设计、构建、文档化和测试 Web API。Swagger 的核心思想是通过定义和描述 API 的规范、结构和交互方式,以提高 API 的可读性、可靠性和易用性,同时降…...

计算机网络-第5章 运输层(1)
主要内容:进程之间的通信与端口、UDP协议、TCP协议、可靠传输原理(停止等待协议、ARQ协议)、TCP报文首部、TCP三大题:滑动窗口、流量控制、拥塞控制机制 5.1 运输层协议概述 运输层向它上面的应用层提供通信服务,真正…...
性能优化-卡牌项目渲染优化
优化的方向 CPU 影响帧率 GPU 影响帧率 内存 超了会崩 显存 显存超了画面会异常,甚至可能导致游戏崩溃 带宽 影响耗电 分辨率 设备性能不行又要求流畅,降低目标渲染分辨率,立竿见影,但是会牺牲画质 场景 1 使用烘焙…...

STM32FreeRTOS任务通知(STM32cube高效开发)
文章目录 一、任务通知(一)任务通知概述1、任务通知可模拟队列和信号量2、任务通知优势和局限性 (二) 任务通知函数1、xTaskNotify()发送通知值不返回先前通知值的函数2、xTaskNotifyFromISR()发送通知函数ISR版本3、x…...

基于element-plus的Dialog选择控件
翻看之前工程师写的vue2的代码,很多都是复制、粘贴,也真是搞不懂,明明可以写一个控件,不就可以重复使用。很多前端总喜欢element搞一下,ant-design也搞一下,有啥意义,控件也不是自己写的&#x…...

手把手教使用静默 搭建Oracle 19c 一主一备ADG集群
一、环境搭建 主机IPora19192.168.134.239ora19std192.168.134.240 1.配置yum源 1.配置网络yum源 1.删除redhat7.0系统自带的yum软件包; rpm -qa|grep yum >oldyum.pkg 备份原信息rpm -qa|grep yum|xargs rpm -e --nodeps 不检查依赖,直接删除…...
使用协程库httpx并发请求
httpx和aiohttp都是比较常用的异步请求库,当然requests多线程或requestsgevent也是不错的选择。 一个使用httpx进行并发请求的脚本如下: import functools import sys import timeimport anyio import httpxasync def fetch(client, results, index) -…...
js的同步异步
JavaScript(JS)是一门单线程的编程语言,这意味着它一次只能处理一个任务。然而,JS 支持同步和异步操作。 同步操作是指代码按照顺序执行,每个操作必须在前一个操作完成后才能进行。这意味着当一个操作在执行时&#x…...
C# MG.CamCtrl 工业相机库(开源) 海康 大恒
C# MG.CamCtrl 相机库(开源) 海康 大恒 介绍工厂模式创建实例选取对应SN号的相机,初始化启动相机取图注销相机参数设置/获取接口 介绍 c# 相机库,含海康、大恒品牌2D相机的常用功能。 底层采用回调信号量模式封装 ,最…...

【Redis】redis的基本使用
📝个人主页:五敷有你 🔥系列专栏:Redis ⛺️稳中求进,晒太阳 Redis的概述 为什么要有redis? redis是数据库,mysql也是数据库,redis做缓存的意义就是为了减轻数据库压力 数据库为什么…...

植物病害识别:YOLO水稻病害识别数据集(3000多张,3个类别,yolo标注)
YOLO水稻病害识别数据集,包含细菌性枯萎病,水稻瘟疫,褐斑病3个常见病害类别,共3000多张图像,yolo标注完整,可直接训练。 适用于CV项目,毕设,科研,实验等 需要此数据集或…...

Java实现Tron(波场)区块链的开发实践(三)波场链水龙头、WEB3测试实战
上一节我们具体讲到Java实现Tron波场链的逻辑代码实现。 这一节我们通过部署和开发好的代码,针对测试链进行自测开发,准备测试环境。 1. 创建离线地址 首先我们需要一个离线地址,我们不需要在线进行创建,直接可以通过第一节的离…...
010-$nextTick
$nextTick 1、问题2、$nextTick3、应用场景 1、问题 Vue 实现响应式,在 data 更新后,一定时间内,没有继续操作DOM,然后会触发浏览器渲染引擎去更新DOM,更新DOM也是需要时间的,所以 data 更新引起的 DOM更新…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...

Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
数据库正常,但后端收不到数据原因及解决
从代码和日志来看,后端SQL查询确实返回了数据,但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离,并且ai辅助开发的时候,很容易出现前后端变量名不一致情况,还不报错,只是单…...

DeepSeek越强,Kimi越慌?
被DeepSeek吊打的Kimi,还有多少人在用? 去年,月之暗面创始人杨植麟别提有多风光了。90后清华学霸,国产大模型六小虎之一,手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水,单月光是投流就花费2个亿。 疯…...
【大厂机试题解法笔记】矩阵匹配
题目 从一个 N * M(N ≤ M)的矩阵中选出 N 个数,任意两个数字不能在同一行或同一列,求选出来的 N 个数中第 K 大的数字的最小值是多少。 输入描述 输入矩阵要求:1 ≤ K ≤ N ≤ M ≤ 150 输入格式 N M K N*M矩阵 输…...
LeetCode 0386.字典序排数:细心总结条件
【LetMeFly】386.字典序排数:细心总结条件 力扣题目链接:https://leetcode.cn/problems/lexicographical-numbers/ 给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。…...

[C++错误经验]case语句跳过变量初始化
标题:[C错误经验]case语句跳过变量初始化 水墨不写bug 文章目录 一、错误信息复现二、错误分析三、解决方法 一、错误信息复现 write.cc:80:14: error: jump to case label80 | case 2:| ^ write.cc:76:20: note: crosses initialization…...