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

【Linux】网络编程

端口号

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

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

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

这种基于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.dtcms.com/a/123141.html

相关文章:

  • 从质检到实验:Python三大T检验实战案例
  • 【Raqote】 1.3 路径填充ShaderClipBlendMaskBlitter结构体(blitter.rs)
  • Vue报错...properly without JavaScript enabled. Please enable it to continue
  • P1216 洛谷 数字三角形
  • 文件相关:echo重定向管道命令扩展详解
  • 论坛系统(测试报告)
  • 1.5SMC62A 单向瞬态抑制二极管,精准防护电路过压
  • 汽车软件开发常用的需求管理工具汇总
  • 校园食堂采购管理系统源码开发指南:探索数据大屏可视化建设
  • 微服务多模块构建feign项目过程与一些报错(2025详细版)
  • 【Java学习】如何利用AI学习Java语言开发(二)
  • linux shell编程规范与变量(一)
  • 25.4.10学习总结
  • 大数据Hadoop(MapReduce)
  • SQL 不走索引的常见情况
  • 小白电路设计-设计7-固定式倍压器直流稳压电源电路设计
  • Elasticsearch 系列专题 - 第三篇:搜索与查询
  • 超越肉眼所见:一种利用视网膜光学相干断层扫描血管成像(OCTA)图像进行早期痴呆检测的关联模型|文献速递-深度学习医疗AI最新文献
  • linux内核
  • 2021-10-19 C++奇怪数
  • 牟乃夏《ArcGIS Engine地理信息系统开发教程》学习笔记1
  • MCU控制4G模组(标准AT命令),CatM的最大速率?
  • 学习笔记四——Rust 函数通俗入门
  • 城电科技 | 从概念到落地:如何打造真正的智慧零碳园区?
  • 粘性定位(position:sticky)——微信小程序学习笔记
  • Diffusion Policy Visuomotor Policy Learning via Action Diffusion官方项目解读(二)(6)
  • 阿里云 AI 搜索开放平台:从算法到业务——AI 搜索驱动企业智能化升级
  • js逆向入门图灵爬虫练习平台第六题
  • AI小程序+SpringAI+管理后台+源码+支持动态添加大模型+支持动态添加AI应用
  • ESP8266水位监测以及温湿度数据采集