您的位置:首页 > 理论基础 > 计算机网络

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

2016-03-07 17:05 309 查看
前言

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

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

服务器部分





变量部分:

listenfd 监听字

connfd 链接字

childpid  服务器进程id

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

 

函数部分:

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

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

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

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

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

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

它接收信息并且回射。

 

客户端部分

 





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

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

 

正常终止:

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

服务器套接字  CLOSE_WAIT

客户套接字   FIN_WAIT_2

接着服务器进程开始结束

服务器向客户端发送FIN

客户端回一个ACK

链接结束。

当服务器主机崩溃

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

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

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

当服务器主机崩溃后重启

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

 

查看原文:http://zmrlinux.com/2016/03/07/linux-%e7%bd%91%e7%bb%9c%e7%bc%96%e7%a8%8b-%e5%9f%ba%e6%9c%ac%e6%9c%8d%e5%8a%a1%e5%99%a8-%e5%ae%a2%e6%88%b7%e7%ab%af/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: