心得与体会

ops/2024/9/24 13:17:33/


Loop本地回环


Loop本地回环,通常指的是以127开头的IP地址段(127.0.0.1 – 127.255.255.254),其中127.0.0.1是最常用的一个地址,被称为本地回环地址(Loop back address)。这个地址不属于任何一个有类别地址类,它代表设备的本地虚拟接口,因此默认被看作是永远不会宕掉的接口。在Windows操作系统中也有相似的定义,所以在不安装网卡前就可以ping通这个本地回环地址。

Loop本地回环的主要作用包括:

测试本机的网络配置:通过ping 127.0.0.1,可以检查本机的网卡和IP协议安装是否正常。如果能成功ping通,说明本机的网络配置基本没有问题。
应用程序的资源调用:在某些SERVER/CLIENT的应用程序运行时,需要调用服务器上的资源。当这些程序在同一台机器上运行而没有别的SERVER时,可以把SERVER的资源装在本机,SERVER的IP地址设为127.0.0.1,这样程序也可以正常运行。
粘包问题

粘包问题是TCP/IP通信中常见的一个问题,主要源于TCP的流式传输特性。具体来说,当发送方连续发送多个数据包时,由于TCP的缓冲机制,这些数据包可能会被合并成一个大的数据包发送给接收方,或者在接收方由于接收缓冲区的原因,多个数据包被合并在一起处理,这就是粘包现象。

粘包问题的原因主要有两个方面:

发送方原因:TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一包数据。若连续几次发送的数据都很少,TCP会根据优化算法把这些数据合成一包后一次发送出去,这样接收方就收到了粘包数据。
接收方原因:接收方用户进程不及时接收数据,导致多个数据包在接收方的缓冲区中粘连在一起,当后续数据到达时,这些数据包被一起处理,从而产生粘包现象。

粘包问题的解决方法:

使用特定结束符:在每个数据包的末尾添加特定的结束符(如换行符\n),接收方在接收到数据时,根据结束符来区分数据包的边界。
固定数据大小:发送方和接收方约定每个数据包的大小,当发送的数据不足约定大小时,用空字符或其他填充字符补齐。
封装自定义数据协议:在TCP协议的基础上封装一层自定义数据协议,该协议中包括数据头和数据体两部分。数据头中存储了数据体的大小等信息,接收方在接收到数据后,先解析数据头,根据数据头中的信息来提取数据体。
recv函数和send函数的使用:通过合理的使用recv和send函数,可以有效地控制数据的接收和发送,从而避免粘包问题。
recv函数

recv函数的主要功能是从已连接的套接字接收数据。

c
#include <sys/types.h>
#include <sys/socket.h>

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

参数:

sockfd:套接字描述符,用于标识要接收数据的套接字。
buf:指向缓冲区的指针,用于存储接收到的数据。
len:缓冲区长度,指定接收数据的最大字节数。
flags(可选):用于指定接收数据的额外选项。

返回值:

成功时,返回接收到的字节数。
如果连接被正常关闭,则返回0。
如果发生错误,则返回-1,并设置相应的errno。

注意事项:

recv函数是阻塞的,可以通过设置套接字为非阻塞模式或使用select/poll/epoll等机制来避免阻塞。
由于网络原因,recv可能无法一次性接收到全部数据,因此需要编写循环来接收数据。
接收到的数据可能需要重组或解析。
send函数

send函数用于实现数据的发送功能。

c
ssize_t send(int sockfd, const void *buf, size_t len, int flags);

参数:

sockfd:套接字描述符,用于标识要发送数据的套接字。
buf:指向数据的指针,包含要发送的数据。
len:数据的长度,指定要发送的字节数。
flags(可选):用于指定发送数据的额外选项。

返回值:

成功时,返回发送的字节数。
如果发生错误,则返回-1,并设置相应的errno。

通过合理地使用recv和send函数,可以有效地进行网络通信,同时需要注意处理粘包等问题,以确保数据的正确传输和接收。


http://www.ppmy.cn/ops/99009.html

相关文章

工厂模式与策略模式:理解与应用

工厂模式与策略模式&#xff1a;理解与应用 1. 引言2. 工厂模式简介2.1 定义2.2 特点2.3 应用场景2.4 工厂模式例子&#xff1a;咖啡制作 3. 策略模式简介3.1 定义3.2 特点3.3 应用场景3.4 策略模式例子&#xff1a;咖啡定价 4. 区别4.1 目的不同4.2 应用场景不同4.3 解决问题不…

开源模型应用落地-qwen2-7b-instruct-LoRA微调模型合并-Axolotl-单机单卡-V100(十)

一、前言 本篇文章将使用Axolotl去合并微调后的模型权重,通过阅读本文,您将能够更好地掌握这些关键技术,理解其中的关键技术要点,并应用于自己的项目中。 二、术语介绍 2.1. LoRA微调 LoRA (Low-Rank Adaptation) 用于微调大型语言模型 (LLM)。 是一种有效的自适应策略,…

easyexcel--导入导出实现自定义格式转换

自定义格式 我们在数据库设计的时候经常会有枚举类型&#xff0c;如0表示普通用户&#xff0c;1表示VIP用户等&#xff0c;这在excel导入的时候&#xff0c;我们会填普通用户而不是0&#xff0c;这样就需要用到自定义格式把普通用户转换成0&#xff0c;我写了一个通用的抽象类…

代码生成:自动化开发

在现代集成开发环境中&#xff0c;智能代码补全和代码生成功能是两个至关重要的组成部分。 智能代码补全利用当前上下文和代码库信息&#xff0c;向程序员推荐合适的代码选项&#xff0c;而代码生成则根据指定输入创建遵循语法和语义规范的代码片段。 许多先进的IDE如Visual St…

【linux中高级命令】

杀进程 1、lsof列出所有打开的文件&#xff0c;‌包括网络连接&#xff0c;‌从而提供关于系统状态的宝贵信息‌ #可以直接查看端口的进程 lsof -i:端口获取到进程&#xff0c;使用kill命令和PID来终止进程 kill -9 [PID]2、列出使用该端口的进程信息&#xff0c;‌包括PID …

UniApp中的Flex布局技巧

随着移动互联网的迅速发展&#xff0c;越来越多的开发者开始使用跨平台技术来开发应用程序。而在跨平台开发里&#xff0c;uniapp是一种非常受欢迎的框架&#xff0c;由于使用uniapp可以快速地开发出同时支持多个平台的应用程序。在uniapp开发中&#xff0c;flex布局是一种非常…

SpringBoot教程(二十五) | SpringBoot整合Sharding-JDBC分库分表

SpringBoot整合Sharding-JDBC分库分表 前言1. 什么是Sharding&#xff1f;2. 什么是Sharding-JDBC&#xff1f; 所需的maven依赖注意点&#xff08;关于shardingsphere的配置情况&#xff09;实操一&#xff1a;如何水平分表1. 步骤说明2. 创建数据库和表3.配置application.pro…

xcode如何编译python

1、找到Python位置&#xff1a; 终端输入&#xff1a;which python 获取python的安装位置&#xff0c;一般为/usr/bin/python。获取到这个路径方便使用它来搭建python的编译环境。 2、在Xcode中创建python程序 打开Xcode&#xff0c;新建工程&#xff08;ShiftCommandN&…