Linux 网络编程 基本服务器-客户端

前言

我们开始学习网络编程,尽管接下来的速度会非常快,但是我还是希望事事具细。

首先我们以一个回射服务器来说说流程。

服务器部分

 

变量部分:

listenfd 监听字

connfd 链接字

childpid  服务器进程id

cliaddr  客户端套接字结构体    servaddr 服务端套接字结构体

 

函数部分:

socket 函数建立一个套接字 ,接收协议类型,返回一个套接字描述符这里是一个通配地址。

接着开始指定服务器套接字结构体的基本信息,协议,IP, 端口等。

bind 函数将服务器信息与套接字描述符绑定。

listen 函数开始监听这个服务器套接字,三次握手就再这里。

我们对与每一个链接都给他开一个进程处理信息。

accept 函数用来完成三路握手完成链接,获取客户端信息,然后返回这个全双工的信息链接字。

它接收信息并且回射。

 

客户端部分

 

 

这个客户端的功能是,从命令行接收一行字符发送给服务器,然后服务器回射给他。

创建一个TCP套接字,然后从命令行获取IP ,并且我们指定一个众所周知的端口,然后链接服务器。

 

正常终止:

首先客户端关闭套接字,向服务器发送一个FIN,服务器发送一个ACK 来回应。这是TCP链接终止的前半部分。

服务器套接字  CLOSE_WAIT

客户套接字   FIN_WAIT_2

接着服务器进程开始结束

服务器向客户端发送FIN

客户端回一个ACK

链接结束。

当服务器主机崩溃

首先TCP会一直尝试重新传送数据,当超过一定时间后,自动判定服务器崩溃结束

其次,如果是因为网络问题导致消息不可达,客户端收到不可达信息后自己关闭

我们可以通过超时,保活,心跳等手段来改善这个现象

当服务器主机崩溃后重启

当服务器崩溃时,客户端只要不主动发送数据它是不知道服务器崩溃的,当服务器再次重启时,之前的链接信息已经全部丢失,链接直接失效。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值