网络编程day1——进程间通信-socket套接字
基本特征:socket是一种接口技术,被抽象了一种文件操作,可以让同一计算机中的不同进程之间通信,也可以让不同计算机中的进程之间通信(网络通信)
本地进程间通信编程模型:
进程A 进程B
创建socket对象 创建socket对象
准备通信地址(本地socket文件) 准备通信地址
绑定sokect对象和地址 ...
监听 ...
等待连接 连接
接收\发送数据 发送\接收数据
关闭socket 关闭socket
删除socket文件
注意:底层需要借助socket文件,才能进行同一计算机不同进程的通信
注意:每一步骤的返回值一定要判断 否则不知道是哪一步出问题
创建socket对象
int socket(int domain, int type, int protocol);功能:创建socket对象
domain:
AF_UNIX/AF_LOCAL 本地通信,进程间通信
AF_INET 基于IPv4地址通信
AF_INET6 基于IPv6地址通信
type:
SOCK_STREAM 数据流协议 //TCP
SOCK_DGRAM 数据报协议 //UDP
protocol:
特殊通信协议,一般不用,写0即可
返回值:成功返回socket描述符,失败返回-1
绑定socket和通信地址
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);功能:绑定socket和通信地址(文件路径\网络地址)
sockfd:socket描述符
addr:通信地址结构体
实际使用传递的地址结构体 sockaddr_un或者sockaddr_in,但是传参时要把它们转换成sockaddr,因为C语言没有自建类型的自动类型识别,因此要强转 //C++有自动类型识别转换
//本地通信使用
#include <sys/un.h>
struct sockaddr_un {
__kernel_sa_family_t sun_family; // 地址簇domain写啥它写啥
char sun_path[UNIX_PATH_MAX]; // socket文件路径 (文件路径给新的 会自动帮你创建文件)
};
// 网络通信时使用
#include <netinet/in.h>
struct sockaddr_in {
__kernel_sa_family_t sin_family; //地址簇domain写啥它写啥
__be16 sin_port; // 端口号
struct in_addr sin_addr; // IP地址结构体
};
struct in_addr {
__be32 s_addr; // IP地址数据
};
addrlen:地址结构体的字节数,用于区分是sockaddr_in还是sockaddr_un
返回值:成功0 失败-1
监听绑定好的socket
int listen(int sockfd, int backlog);功能:监听已经绑定好的socket
sockfd:socket描述符
backlog:监听等待连接的排队数量 默认最大128
//等待连接有个排队队列 backlog是指队列满了之后还可以额外排队的数量 随便写5
返回值:成功0 失败-1 //监听成功才能等待连接
等待连接
int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);功能:等待连接
sockfd:socket描述符
addr:获取连接者的地址,不想获取可以给NULL //本地连接基本不用获取
addrlen:获取连接者的通信地址结构体字节数,不想获取可以给NULL
返回值:成功返回一个针对该连接的新的socket描述符,失败返回-1 //接下去通信需要用这个新的socket描述符
注意:
1、如果没有连接,那么该函数会阻塞等待
2、如果要获取连接者的地址,后面两个参数都需要传递
3、addrlen要获取时,先要给addrlen传递addr的字节数,才能获取连接者的ip
连接
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);功能:连接socket
sockfd:socket描述符
addr:目标地址 //建立连接
addrlen:目标地址结构体的字节数
返回值:成功0 失败-1
发送数据
ssize_t send(int sockfd,const void *buf,size_t len,int flags);功能:向建立连接之后的socket发送数据,数据流通信使用
sockfd:建立连接之后socket描述符
buf:待发送的数据内存首地址
len:要发送的字节数
flags:一般写0阻塞发送即可
MSG_DONTWAIT 不阻塞
MSG_OOB 优先紧急数据
返回值:成功发送的字节数,出错返回-1 //连接断开了就可能发送失败
接收数据
ssize_t recv(int sockfd, void *buf, size_t len, int flags);功能:从建立连接的socket中接收数据,数据流通信使用
sockfd:建立连接之后socket描述符
buf:存储接收的数据的内存首地址
len:buf的字节数
flags:一般写0阻塞接收即可
MSG_DONTWAIT 不阻塞
返回值:成功接收到的字节数,-1出现错误,正常断开返回0
关闭socket
close(fd)
功能:关闭socket //一切皆文件 关闭新的那个socket 断开连接
192.168.122.4 192.168.122.5 ip地址
255.255.255.0 子网掩码
192.168.122.0 网络地址
192.168.122.4/24 (24个1)相当于&255.255.255.0
相关文章:
网络编程day1——进程间通信-socket套接字
基本特征:socket是一种接口技术,被抽象了一种文件操作,可以让同一计算机中的不同进程之间通信,也可以让不同计算机中的进程之间通信(网络通信) 本地进程间通信编程模型: 进程A …...
Android-关于页面卡顿的排查工具与监测方案
作者:一碗清汤面 前言 关于卡顿这件事已经是老生常谈了,卡顿对于用户来说是敏感的,容易被用户直接感受到的。那么究其原因,卡顿该如何定义,对于卡顿的发生该如何排查问题,当线上用户卡顿时,在线…...
VueX 与Pinia 一篇搞懂
VueX 简介 Vue官方:状态管理工具 状态管理是什么 需要在多个组件中共享的状态、且是响应式的、一个变,全都改变。 例如一些全局要用的的状态信息:用户登录状态、用户名称、地理位置信息、购物车中商品、等等 这时候我们就需要这么一个工…...
指针与空间按钮的交互
文章目录 原理案例:“直线指针”和“点击按钮”的交互1、效果2、步骤 原理 指针不能直接和空间按钮交互,得借助一个中间层——分发器——它分发指针的进入、退出、选择事件,空间按钮自动监听这些事件 案例:“直线指针”和“点击…...
java八股文面试[数据库]——慢查询优化
分析慢查询日志 直接分析慢查询日志, mysql使用explain sql语句进行模拟优化器来执行分析。 oracle使用explain plan for sql语句进行模拟优化器来执行分析。 table | type | possible_keys | key |key_len | ref | rows | Extra EXPLAIN列的解释: ta…...
《Flink学习笔记》——第十章 容错机制
10.1 检查点(Checkpoint) 为了故障恢复,我们需要把之前某个时间点的所有状态保存下来,这份“存档”就是“检查点” 遇到故障重启的时候,我们可以从检查点中“读档”,恢复出之前的状态,这样就可以…...
【LeetCode-中等题】230. 二叉搜索树中第K小的元素
文章目录 题目方法一:层序遍历 集合排序方法二:中序遍历(栈 或者 递归 )方法三(方法二改进):中序遍历(栈 ) 题目 该题最大的特点就是这个树是二叉树: 所以…...
DQL语句的用法(MySQL)
文章目录 前言一、DQL语句间接和语法1、DQL简介2、DQL语法 二、DQL语句使用1、基础查询(1)查询多个字段(2)为字段设置别名(3)去除重复记录 总结 前言 本文主要介绍SQL语句中DQL语句的功能和使用方法&#…...
【Navicat Premium 16】使用Navicat将excel的数据进行单表的导入,详细操作
业务场景:经常与数据打交道嘛,有的时候会需要将excel的数据导入到数据库中,后面发现对于单表的数据导入,使用Navicat还是非常方便的,仅仅需要将字段关系映射好就可以了 一、开始操作 前提条件:已经成功连接…...
学习笔记230810--vue项目中get请求的两种传参方式
问题描述 今天写了一个对象方式传参的get请求接口方法,发现没有载荷,ip地址也没有带查询字符串,数据也没有响应。 代码展示 错误分析 实际上这里的query是对象方式带参跳转的参数名,而get方法对象方式传参的参数名是parmas 解…...
分享一种针对uni-app相对通用的抓包方案
PART1,前言 近年来混合开发APP逐渐成为主流的开发模式,与传统的开发模式相比混合开发极大的提升了开发效率,同时跨平台的特性也降低了开发成本,一直以来混合开发被诟病的性能问题随着技术的发展也得到改善。技术的发展往往是一把…...
【2023百度之星备赛】码蹄集 BD202301 公园(BFS求最短路)
题目 https://www.matiji.net/exam/brushquestion/1/4347/179CE77A7B772D15A8C00DD8198AAC74?from1 题目大意: 给定一个无向图,有两个人往同一个目的地走,分别消耗体力TE、FE。如果他们到某个点汇合了,然后一起走向目的地&…...
2022年下半年系统架构设计师真题(下午带答案)
试题一 (25分) 某电子商务公司拟升级其会员与促销管理系统,向用户提供个性化服务,提高用户的粘性。在项目立项之初,公司领导层一致认为本次升级的主要目标是提升会员管理方式的灵活性,由于当前用户规模不大,业务也相对…...
26、ADS瞬时波形仿真-TRANSIENT仿真(以共射放大器为例)
26、ADS瞬时波形仿真-TRANSIENT仿真(以共射放大器为例) 在本科期间,学习模电的时候总是要对各种三极管电路进行MULTISIM仿真,其实ADS具备相同的功能,而且对于射频电路,使用ADS进行仿真可以结合版图进行&am…...
【微服务部署】02-配置管理
文章目录 1.ConfigMap1.1 创建ConfigMap方式1.2 使用ConfigMap的方式1.3 ConfigMap使用要点建议 2 分布式配置中心解决方案2.1 什么时候选择配置中心2.2 Apollo配置中心系统的能力2.2.1 Apollo创建配置项目2.2.2 项目使用2.2.3 K8s中使用Apollo 1.ConfigMap ConfigMap是K8s提供…...
NTP时钟同步服务器
目录 一、什么是NTP? 二、计算机时间分类 三、NTP如何工作? 四、NTP时钟同步方式(linux) 五、时间同步实现软件(既是客户端软件也是服务端软件) 六、chrony时钟同步软件介绍 七、/etc/chrony.conf配置文件介…...
webassembly003 ggml GGML Tensor Library part-2 官方使用说明
https://github.com/ggerganov/whisper.cpp/tree/1.0.3 GGML Tensor Library 官方有一个函数使用说明,但是从初始版本就没修改过 : https://github1s.com/ggerganov/ggml/blob/master/include/ggml/ggml.h#L3-L173 This documentation is still a work in progres…...
ES主集群的优化参考点
因为流量比较大, 导致ES线程数飙高,cpu直往上窜,查询耗时增加,并传导给所有调用方,导致更大范围的延时。如何解决这个问题呢? ES负载不合理,热点问题严重。ES主集群一共有几十个节点࿰…...
全国范围内-二手房小区数据-2023-8月更新
收录融合去重多个平台数据:80万,仅供数字参考 数据纬度字段名注释枚举值基础信息id主键id:名称城市来源生成 md5值00001073838501125ec4473463ead9ccname名称瑞祥安文创园address地址(朝阳)双桥路东柳村口南口lng经度116.581903lat纬度39.89…...
第4章 循环变换
4.1 适配体系结构特征的关键技术 由于高级语言隐藏了底层硬件体系结构的大量细节,如果不经过优化直接将高级程序设计语言编写的程序部署在底层硬件上,往往无法充分利用底层硬件体系结构的处理能力。 算子融合不仅可以提…...
S-UI配置文件加密终极指南:保护敏感信息的最佳实践 [特殊字符]
S-UI配置文件加密终极指南:保护敏感信息的最佳实践 🔒 S-UI是一款基于SagerNet/Sing-Box构建的高级Web面板,提供多协议支持和流量管理功能。在使用过程中,配置文件包含大量敏感信息,如API密钥、用户数据和服务器配置&…...
终极指南:如何深度调试AMD Ryzen处理器实现性能最大化
终极指南:如何深度调试AMD Ryzen处理器实现性能最大化 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…...
Qwen3.5-2B企业落地案例:制造业设备图片故障诊断辅助系统搭建
Qwen3.5-2B企业落地案例:制造业设备图片故障诊断辅助系统搭建 1. 项目背景与挑战 在制造业生产线上,设备故障诊断一直是影响生产效率的关键环节。传统方式依赖工程师人工巡检,存在以下痛点: 人力成本高:需要专业工程…...
开源心电监测终极指南:AD8232心率监测器的精准监测与实时分析方案
开源心电监测终极指南:AD8232心率监测器的精准监测与实时分析方案 【免费下载链接】AD8232_Heart_Rate_Monitor AD8232 Heart Rate Monitor 项目地址: https://gitcode.com/gh_mirrors/ad/AD8232_Heart_Rate_Monitor AD8232心率监测器是一款基于专业心电传感…...
5个维度解锁PPTist:浏览器端演示文稿创作的开源解决方案
5个维度解锁PPTist:浏览器端演示文稿创作的开源解决方案 【免费下载链接】PPTist PowerPoint-ist(/pauəpɔintist/), An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing …...
你的Windows Defender是否正在拖慢系统性能?3步彻底解决方案
你的Windows Defender是否正在拖慢系统性能?3步彻底解决方案 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirro…...
4个简单步骤:如何用OpenCore Legacy Patcher让老旧Mac焕发新生
4个简单步骤:如何用OpenCore Legacy Patcher让老旧Mac焕发新生 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher是一个开源…...
如何让老旧Mac重获新生?OpenCore Legacy Patcher终极改造指南
如何让老旧Mac重获新生?OpenCore Legacy Patcher终极改造指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher是一款开源…...
从开发到SRE:PyTorch 3.0静态图生产部署必须签署的4份SLA协议,及对应可观测性埋点清单
第一章:PyTorch 3.0静态图分布式训练生产部署全景概览PyTorch 3.0 引入原生静态图编译能力(TorchDynamo Inductor 后端深度集成),结合 torch.distributed 的增强调度器与弹性容错机制,构建了面向大规模集群的端到端生…...
5步实现图表数据提取自动化:用WebPlotDigitizer提升科研效率80%
5步实现图表数据提取自动化:用WebPlotDigitizer提升科研效率80% 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 还在为手动…...
