农民 发表于 2025-4-11 15:01:25

【Linux】网络编程

目次
端口号
网络字节序
socket编程
接口
sockaddr结构
udp网络程序
创建套接字
绑定
接收
发送
客户端需要绑定吗?
客户端执行方法
当地环回地址
终端文件
代码
tcp网络程序
SOCK_STREAM
监听
查询网络信息
获取新连接
地址转换函数
客户端绑定
多进程版本
关闭多余文件形貌符
如何办理父进程等候子进程会阻塞的题目?
多线程版本
线程池版本
保卫进程
进程与任务的关系

端口号

网络通讯不仅包括创建连接,还有应用层的通讯。
https://i-blog.csdnimg.cn/direct/7e5d5b01ffcf4b4bad07461b57f91a55.png

端口号负责判断发给上层哪一个应用。
发送方和接收方在报头中有对应的源端口号和目标端口号。
https://i-blog.csdnimg.cn/direct/bb235cbad3d04f5b948cea3929263e50.png

https://i-blog.csdnimg.cn/direct/4a54b24b5b02429ca174dc9a4b2324f6.png
https://i-blog.csdnimg.cn/direct/b028ac5c54ff4f23a556e7c9cafafad2.png
这种基于ip+端口的通讯方式叫socket。

端口号与进程id
https://i-blog.csdnimg.cn/direct/e96d1377f9c646eeb7292e72161279cd.png
https://i-blog.csdnimg.cn/direct/a68982b8157e46df8f423d3721af67bc.png

绑定的过程就是把进程pcb和哈希表中端口对应位置关联起来。
https://i-blog.csdnimg.cn/direct/e32c7a91a7af4e94b55ea21303c5036b.png

网络字节序

https://i-blog.csdnimg.cn/direct/42da21b0275f435ea59bf241d1af1388.png

转换接口
https://i-blog.csdnimg.cn/direct/6ef2de54de4548b8850e2c0db71f529f.png

socket编程

接口

https://i-blog.csdnimg.cn/direct/39f9318939024323b58c6f8b362bcd51.png

sockaddr结构

套接字有三种
https://i-blog.csdnimg.cn/direct/f45b6f7f36384016bc74da391676d414.png
设计者不想写三套接口,就需要把范例同一,以是都传入sockaddr结构体,判断地址范例从而决定套接字的种类。
https://i-blog.csdnimg.cn/direct/f2d86c46f75e4e38854ed5b233b5c745.png

udp网络程序

创建套接字

https://i-blog.csdnimg.cn/direct/329152d1d5b345cbb108b5523ce9be1d.png
第一个参数是域的范例
https://i-blog.csdnimg.cn/direct/3d482449c43044b5b13f8551c9487306.png
第二个参数是套接字范例
https://i-blog.csdnimg.cn/direct/b0ef6653fa89456c927145116348912e.png
第三个参数是协议范例
返回值是文件形貌符
https://i-blog.csdnimg.cn/direct/3c2ea0d089ca4ab68d160fdb15576fc4.png

绑定

https://i-blog.csdnimg.cn/direct/a0bc8d421e134534adeb5c3d9ea684d9.png
第二个参数是自己构造一个结构体传进去
family表现域范例,port是端口号,addr是ip
https://i-blog.csdnimg.cn/direct/40c4b79fa10f459ca9505f40caf1fb06.png
https://i-blog.csdnimg.cn/direct/a29d3a464ff8467db2cb76cc9c462268.png
https://i-blog.csdnimg.cn/direct/4f1aaec0c6e442d4a1e7d09bc4ba96a3.png

本主机的端口号要发送出去会颠末网络,以是要转网络字节序。
ip要发出去也要转网络字节序。
https://i-blog.csdnimg.cn/direct/afcd7e89f6a64778b0a09b20c2d102a7.png

整数ip和字符串ip快速转换
整数转字符串:构造四个八位整型的结构体,将整数强转该结构体范例,分别访问结构体并转字符串。
字符串转整型:将整数强转四个八位结构体范例,分别访问并赋值。
https://i-blog.csdnimg.cn/direct/eb791f9a465a4ad59a3ff6b4b89c0daa.png

第三个参数是结构体大小。
https://i-blog.csdnimg.cn/direct/0fcb4135322445babb4034a3b99df935.png

 绑定不推荐直接绑定详细ip一般写0.0.0.0,由于有一些主机有多个网卡,绑定一个其他网卡就接收不了了。
https://i-blog.csdnimg.cn/direct/ec1bd01731834d76b246ddfb056bee75.png
INADDR_ANY表现接收恣意地址
https://i-blog.csdnimg.cn/direct/9d86a838089043ac880ac34541f8078d.png

绑定端口只管大一点,1023以下是内置端口。
https://i-blog.csdnimg.cn/direct/e185e97d7457455cb54a8e1acfbdb87d.png

接收

从套接字中读一个报文
结构体是输出型参数,负责获得对方的信息。
https://i-blog.csdnimg.cn/direct/e7d537164a75461d88a2c89559dd8fb7.png
buffer是对方发送的内容,结构体是对方的信息
https://i-blog.csdnimg.cn/direct/2d7d6e30baef4753977ab0f39798b2fa.png

发送

https://i-blog.csdnimg.cn/direct/ce89acef883a4191a90a59fed7c5e6f9.png
结构体是发送目标的信息
https://i-blog.csdnimg.cn/direct/9507d4a8a6924d24a4408cfa1e0fde8f.png

客户端需要绑定吗?

https://i-blog.csdnimg.cn/direct/a159710a1e9e4f0db9bae9d0e7f9f83a.png

客户端执行方法

把代码进行分层,处理方法分开。
popen把字符串当成下令,创建子进程,父子进程创建管道,子进程执行下令,效果返回给父进程。
https://i-blog.csdnimg.cn/direct/84ea8731737e4ed69c1c5aa50c42b9ee.png

当地环回地址

往下贯穿协议栈,然后又往上返回,不进入网络
https://i-blog.csdnimg.cn/direct/8996d752bdf345528f3ad2eb240d5208.png

终端文件

把输入到2号文件的内容重定向到2号终端。
https://i-blog.csdnimg.cn/direct/760540cefb194c3495cac5a9d110e591.png
xshell可以开许多个终端,查询终端。
https://i-blog.csdnimg.cn/direct/e2878ddc37dd4027a80ddb1a8dda119f.png

代码

https://i-blog.csdnimg.cn/direct/14f953fea2c64b2597de6ac104a9c7d6.png
 socket_lesson/my_udp · lyh/linux - 码云 - 开源中国

tcp网络程序

SOCK_STREAM

选择SOCK_STREAM面向字节流。
https://i-blog.csdnimg.cn/direct/42eebb6e718e4b18b10bdd0d6d643434.png

监听

https://i-blog.csdnimg.cn/direct/17409e830bf644c9a022494fd30ee533.png
https://i-blog.csdnimg.cn/direct/7275074162ec454b9a9e3e5a7afa4694.png
https://i-blog.csdnimg.cn/direct/686703e85c674789bdf5740d43da5275.png

查询网络信息

l表现listen,p表现对应进程,t表现tcp。
https://i-blog.csdnimg.cn/direct/8a66eb70a25748d1baebd126b9cc9092.png

获取新连接

返回值也是文件形貌符
accept返回的文件形貌符负责真正的IO服务,参数的文件形貌符负责创建连接,一般叫作监听套接字。
连接获取失败就继承重新获取。
https://i-blog.csdnimg.cn/direct/192aae52f64f4c7ebd95b152a3e1be17.png

地址转换函数

https://i-blog.csdnimg.cn/direct/d691f60fe74246faafee2a0188d52863.png

客户端绑定

https://i-blog.csdnimg.cn/direct/47b14b6e1dd44f14b8539cce114d8c96.png

多进程版本

关闭多余文件形貌符

多进程版,子进程会继承文件形貌符信息,让子进程负责IO就可以把监听套接字关了,父进程不关注IO也可以把不需要的文件形貌符关了。
https://i-blog.csdnimg.cn/direct/f1bc994450864fd8b6e0fc33c7e5add3.png

如何办理父进程等候子进程会阻塞的题目?

利用孙子进程办理,把事情给孙子进程做,子进程直接退出,父进程也等候完毕。
https://i-blog.csdnimg.cn/direct/cd70956a8d974fde8cb98362d2dc1471.png
第二种方法:用信号忽略
https://i-blog.csdnimg.cn/direct/7d7fd2b4152a496b9d2195aae2b16924.png

多线程版本

detach线程分离从而不消等候子线程 

当静态函数想访问类内成员时,可以把线程的参数结构加一个该类的指针。
https://i-blog.csdnimg.cn/direct/f8638af57c3644d9bbf624b5cd487f3c.png
https://i-blog.csdnimg.cn/direct/beae32aed4a148c2afbc0df73c15daf4.png

线程池版本

假如服务端正在写,客户端关闭了文件,读端关闭了,写端也会被迫关闭。
如许可以防止写端被关闭。防止服务端被关闭就对这个信号忽略。
https://i-blog.csdnimg.cn/direct/718d011d4afe4284a200b86c1c59563a.png

客户端重连
https://i-blog.csdnimg.cn/direct/29b53a4687124e7eb3742d8ea4c01666.png

服务器挂掉无法立即重新启动,办理方法:
https://i-blog.csdnimg.cn/direct/f7cef71c509f45c8913b0e9d07fd23dc.png

保卫进程

每一个用户登陆都会产生一个会话,会话里面会生成bash进程提供下令行服务,一个会话可以有一个前台进程多个后台进程,键盘和信号只能影响前台进程。
https://i-blog.csdnimg.cn/direct/db0b92b39fef4761851ed6a7c7728128.png
&变成后台任务,jobs查看后台任务,fg把后台变成前台
https://i-blog.csdnimg.cn/direct/33245d55fc1f462bb1dda4fbb02350b3.png
fg变成前台后如何变回后台:先用信号暂停,然后用bg。信号暂停后任务会以制止状态回到后台,bash主动回前台。
https://i-blog.csdnimg.cn/direct/4cbcfaa8e98d41af8b3268a5577412d6.png

进程与任务的关系

任务是一个详细事情,它可以被一个进程完成,也可以被一个进程组完成。
https://i-blog.csdnimg.cn/direct/44520c7216ae42e49addeda7209cc6ef.png

保卫进程可以不受用户退出,注销(关闭会话)的影响。
https://i-blog.csdnimg.cn/direct/3f222b67af7a4c24ac435142fd2e2740.png
做法:把目标进程(组)迁移到一个新的会话。
https://i-blog.csdnimg.cn/direct/8047e6557b8c496a9717cfe06adf3df6.png
调用接口的进程不能是该进程组的组长。办理方法:让子进程调用。
https://i-blog.csdnimg.cn/direct/e26a0e8efd92468a9ca0baca123dd1bf.png
https://i-blog.csdnimg.cn/direct/996554204e2048a980a06a8d3c0f7148.png
https://i-blog.csdnimg.cn/direct/1dfe6a39efdb4b88913b4df06f020711.png

第二种方法:
https://i-blog.csdnimg.cn/direct/915bc51fe05444548e1f4c9b097c701c.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【Linux】网络编程