【Linux】网络编程

农民  论坛元老 | 2025-4-11 15:01:25 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1578|帖子 1578|积分 4734

目次
端口号
网络字节序
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主动回前台。


进程与任务的关系

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


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

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

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




第二种方法:


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农民

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表