【Linux】网络编程

目录

端口号

网络字节序

socket编程

接口

sockaddr结构

udp网络程序

创建套接字

绑定

接收

发送

客户端需要绑定吗?

客户端执行方法

本地环回地址

终端文件

代码

tcp网络程序

SOCK_STREAM

监听

查询网络信息

获取新连接

地址转换函数

客户端绑定

多进程版本

关闭多余文件描述符

如何解决父进程等待子进程会阻塞的问题?

多线程版本

线程池版本

守护进程

进程与任务的关系


端口号

网络通信不仅包括建立连接,还有应用层的通信。

端口号负责判断发给上层哪一个应用。

发送方和接收方在报头中有对应的源端口号和目的端口号。

这种基于ip+端口的通信方式叫socket。

端口号与进程id

绑定的过程就是把进程pcb和哈希表中端口对应位置关联起来。


网络字节序

转换接口


socket编程

接口


sockaddr结构

套接字有三种

设计者不想写三套接口,就需要把类型统一,所以都传入sockaddr结构体,判断地址类型从而决定套接字的种类。


udp网络程序

创建套接字

第一个参数是域的类型

第二个参数是套接字类型

第三个参数是协议类型

返回值是文件描述符


绑定

第二个参数是自己构造一个结构体传进去

family表示域类型,port是端口号,addr是ip

本主机的端口号要发送出去会经过网络,所以要转网络字节序。

ip要发出去也要转网络字节序。

整数ip和字符串ip快速转换

整数转字符串:构造四个八位整型的结构体,将整数强转该结构体类型,分别访问结构体并转字符串。

字符串转整型:将整数强转四个八位结构体类型,分别访问并赋值。

第三个参数是结构体大小。

 绑定不推荐直接绑定具体ip一般写0.0.0.0,因为有一些主机有多个网卡,绑定一个其他网卡就接收不了了。

INADDR_ANY表示接收任意地址

绑定端口尽量大一点,1023以下是内置端口。


接收

从套接字中读一个报文

结构体是输出型参数,负责获得对方的信息。

buffer是对方发送的内容,结构体是对方的信息


发送

结构体是发送目标的信息


客户端需要绑定吗?


客户端执行方法

把代码进行分层,处理方法分开。

popen把字符串当成命令,创建子进程,父子进程建立管道,子进程执行命令,结果返回给父进程。


本地环回地址

往下贯穿协议栈,然后又往上返回,不进入网络


终端文件

把输入到2号文件的内容重定向到2号终端。

xshell可以开很多个终端,查询终端。


代码

 socket_lesson/my_udp · lyh/linux - 码云 - 开源中国


tcp网络程序

SOCK_STREAM

选择SOCK_STREAM面向字节流。

监听

查询网络信息

l表示listen,p表示对应进程,t表示tcp。

获取新连接

返回值也是文件描述符

accept返回的文件描述符负责真正的IO服务,参数的文件描述符负责建立连接,一般叫作监听套接字。

连接获取失败就继续重新获取。

地址转换函数

客户端绑定

多进程版本

关闭多余文件描述符

多进程版,子进程会继承文件描述符信息,让子进程负责IO就可以把监听套接字关了,父进程不关注IO也可以把不需要的文件描述符关了。

如何解决父进程等待子进程会阻塞的问题?

利用孙子进程解决,把事情给孙子进程做,子进程直接退出,父进程也等待完毕。

第二种方法:用信号忽略

多线程版本

detach线程分离从而不用等待子线程 

当静态函数想访问类内成员时,可以把线程的参数结构加一个该类的指针。

线程池版本

假如服务端正在写,客户端关闭了文件,读端关闭了,写端也会被迫关闭。

这样可以防止写端被关闭。防止服务端被关闭就对这个信号忽略。

客户端重连

服务器挂掉无法立即重新启动,解决方法:

守护进程

每一个用户登陆都会产生一个会话,会话里面会生成bash进程提供命令行服务,一个会话可以有一个前台进程多个后台进程,键盘和信号只能影响前台进程。

&变成后台任务,jobs查看后台任务,fg把后台变成前台

fg变成前台后如何变回后台:先用信号暂停,然后用bg。信号暂停后任务会以停止状态回到后台,bash自动回前台。

进程与任务的关系

任务是一个具体事情,它可以被一个进程完成,也可以被一个进程组完成。

守护进程可以不受用户退出,注销(关闭会话)的影响。

做法:把目标进程(组)迁移到一个新的会话。

调用接口的进程不能是该进程组的组长。解决方法:让子进程调用。

第二种方法:

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

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

相关文章

Go 语言中的select是做什么的

Go 语言中的 select 是做什么的 在 Go 语言中,select 语句是用于处理多个通道(channel)操作的一种控制结构。它类似于 switch 语句,但专门用于并发编程,允许 Goroutine 在多个通道上等待操作(发送或接收&a…

智慧班牌系统解决方案,SaaS智慧电子班牌云平台

智慧班牌系统解决方案 系统概述 智慧班牌是智慧校园建设不断发展的产物,是教育信息化改革的载体。通过智慧班牌可以高效便捷传递各种知识信息和通知信息、及时反馈课堂信息、实现班级的透明化管理。智慧班牌将学生平安考勤、异常出勤情况及时反馈至家长、老师&…

利用大模型和聚类算法找出 Excel 文件中重复或相似度高的数据,并使用 FastAPI 进行封装的详细方案

以下是一个利用大模型和聚类算法找出 Excel 文件中重复或相似度高的数据,并使用 FastAPI 进行封装的详细方案: 方案流程 数据读取:从 Excel 文件中读取数据。文本向量化:使用大模型将文本数据转换为向量表示。聚类分析:运用聚类算法对向量进行分组,将相似度高的数据归为…

【Docker基础】容器技术详解:生命周期、命令与实战案例

文章目录 一、什么是容器?二、为什么需要容器三、容器的生命周期容器状态容器OOM容器异常退出容器异常退出容器暂停 四、容器命令命令清单详细介绍 五、容器操作案例容器的状态迁移容器批量操作容器交互模式attached 模式detached 模式interactive 模式 容器 与 宿主…

Laravel 实现 队列 发送邮件功能

一. 什么是队列 在构建 Web 应用程序时,你可能需要执行一些任务,例如解析文件,发送邮件,大量的数据计算等等,这些任务在典型的 Web 请求期间需要很长时间才能执行。 庆幸的是,Laravel 可以创建在后台运行…

flink Shuffle的总结

关于 ** ​5 种 Shuffle 类型** 的区别、使用场景及 Flink 版本支持的总结: * 注意:下面是问AI具体细节与整理学习 1. 核心区别 Shuffle 类型核心特点使用场景Flink 版本支持Pipelined Shuffle流式调度,纯内存交换,低延迟(毫秒级…

Git使用与管理

一.基本操作 1.创建本地仓库 在对应文件目录下进行: git init 输入完上面的代码,所在文件目录下就会多一个名为 .git 的隐藏文件,该文件是Git用来跟踪和管理仓库的。 我们可以使用 tree 命令(注意要先下载tree插件&#xff09…

计算机视觉——深度学习图像处理中目标检测平均精度均值(mAP)与其他常用评估指标

概述 平均精度均值(mAP)是目标检测领域中最为流行且复杂的重要评估指标之一。它广泛用于综合总结目标检测器的性能。许多目标检测模型会输出类似以下的参数结果: Average Precision (AP) [ IoU0.50:0.95 | area all | maxDets100 ] 0.3…

C语言中单链表操作:查找节点与删除节点

一. 简介 前面学习了C语言中创建链表节点,向链表中插入节点等操作,文章如下: C语言中单向链表:创建节点与插入新节点-CSDN博客 本文继续学习c语言中对链表的其他操作,例如在链表中查找某个节点,删除链表…

WePY 框架:小程序开发的“Vue式”利器!!!

WePY 框架:小程序开发的“Vue式”利器 🚀 哈喽,大家好!👋 今天我们要聊聊一个在微信小程序开发中大放异彩的框架——WePY!它是什么?有什么特点?为啥值得一试?别急&#…

什么是微前端?有什么好处?有哪一些方案?

微前端(Micro Frontends) 微前端是一种架构理念,借鉴了微服务的思想,将一个大型的前端应用拆分为多个独立、自治的子应用,每个子应用可以由不同团队、使用不同技术栈独立开发和部署,最终聚合为一个整体产品…

【家政平台开发(33)】库存管理模块开发实战:从基础搭建到智能管控

本【家政平台开发】专栏聚焦家政平台从 0 到 1 的全流程打造。从前期需求分析,剖析家政行业现状、挖掘用户需求与梳理功能要点,到系统设计阶段的架构选型、数据库构建,再到开发阶段各模块逐一实现。涵盖移动与 PC 端设计、接口开发及性能优化,测试阶段多维度保障平台质量,…

Mysql个人笔记

Mysql个人笔记 sql基础书写规则和种类种类书写规则注释规则启动 DDL数据类型数据库的操作useshowcreatedrop 表的操作useshowcreate创建表复制表 dropalter Mysql的存储引擎 DMLselectselect语句like(谓词)where聚合函数:关于nullgroup byexi…

【重装系统】大白菜自制U盘装机,备份C盘数据,解决电脑启动黑屏/蓝屏

1. 准备 U 盘 U 盘容量至少 8G,备份 U 盘的数据(后期会格式化) 2. 从微软官网下载操作系统镜像 https://www.microsoft.com/zh-cn/software-download/windows11 3. 下载安装大白菜 https://www.alipan.com/s/33RVnKayUfY 4. 插入 U 盘&#…

各类神经网络学习:(十)注意力机制(第2/4集),pytorch 中的多维注意力机制、自注意力机制、掩码自注意力机制、多头注意力机制

上一篇下一篇注意力机制(第1/4集)待编写 一、pytorch 中的多维注意力机制: 在 N L P NLP NLP 领域内,上述三个参数都是 向量 , 在 p y t o r c h pytorch pytorch 中参数向量会组成 矩阵 ,方便代码编写。…

uni-app初学

文章目录 1. pages.json 页面路由2. 图标3. 全局 CSS4. 首页4.1 整体框架4.2 完整代码4.3 轮播图 swiper4.3.1 image 4.4 公告4.4.1 uni-icons 4.5 分类 uni-row、uni-col4.6 商品列表 小程序开发网址: 注册小程序账号 微信开发者工具下载 uniapp 官网 HbuilderX 下…

VBA将Word文档内容逐行写入Excel

如果你需要将Word文档的内容导入Excel工作表来进行数据加工,使用下面的代码可以实现: Sub ImportWordToExcel()Dim wordApp As Word.ApplicationDim wordDoc As Word.DocumentDim excelSheet As WorksheetDim filePath As VariantDim i As LongDim para…

MySQL运行一段时间后磁盘出现100%读写

MySQL运行一段时间后磁盘出现100%读写的情况,可能是由多种原因导致的,以下是一些常见原因及解决方法: 可能的原因 1. 磁盘I/O压力过大[^0^]:数据量过大,数据库查询和写入操作消耗大量I/O资源。索引效率低&#xff0c…

【RabbitMQ】延迟队列

1.概述 延迟队列其实就是队列里的消息是希望在指定时间到了以后或之前取出和处理,简单来说,延时队列就是用来存放需要在指定时间被处理的元素的队列。 延时队列的使用场景: 1.订单在十分钟之内未支付则自动取消 2.新创建的店铺,…

Linux笔记之Ubuntu系统设置自动登录tty1界面

Ubuntu22.04系统 编辑getty配置文件 vim /etc/systemd/system/gettytty1.service.d/override.conf如果该目录或者文件不存在,进行创建。 在override.conf文件中进行编辑: [Service] ExecStart ExecStart-/sbin/agetty --autologin yourusername --no…