Linux 网络编程 基本服务器-客户端
2016-03-07 17:05
309 查看
前言
我们开始学习网络编程,尽管接下来的速度会非常快,但是我还是希望事事具细。
首先我们以一个回射服务器来说说流程。
![](http://zmrlinux.com/wp-content/uploads/2016/03/2016-03-07-160655-%E7%9A%84%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE.png)
connfd 链接字
childpid 服务器进程id
cliaddr 客户端套接字结构体 servaddr 服务端套接字结构体
接着开始指定服务器套接字结构体的基本信息,协议,IP, 端口等。
bind 函数将服务器信息与套接字描述符绑定。
listen 函数开始监听这个服务器套接字,三次握手就再这里。
我们对与每一个链接都给他开一个进程处理信息。
accept 函数用来完成三路握手完成链接,获取客户端信息,然后返回这个全双工的信息链接字。
它接收信息并且回射。
![](http://zmrlinux.com/wp-content/uploads/2016/03/2016-03-07-161909-%E7%9A%84%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE.png)
这个客户端的功能是,从命令行接收一行字符发送给服务器,然后服务器回射给他。
创建一个TCP套接字,然后从命令行获取IP ,并且我们指定一个众所周知的端口,然后链接服务器。
服务器套接字 CLOSE_WAIT
客户套接字 FIN_WAIT_2
接着服务器进程开始结束
服务器向客户端发送FIN
客户端回一个ACK
链接结束。
其次,如果是因为网络问题导致消息不可达,客户端收到不可达信息后自己关闭
我们可以通过超时,保活,心跳等手段来改善这个现象
查看原文: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/
我们开始学习网络编程,尽管接下来的速度会非常快,但是我还是希望事事具细。
首先我们以一个回射服务器来说说流程。
服务器部分
![](http://zmrlinux.com/wp-content/uploads/2016/03/2016-03-07-160655-%E7%9A%84%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE.png)
变量部分:
listenfd 监听字connfd 链接字
childpid 服务器进程id
cliaddr 客户端套接字结构体 servaddr 服务端套接字结构体
函数部分:
socket 函数建立一个套接字 ,接收协议类型,返回一个套接字描述符这里是一个通配地址。接着开始指定服务器套接字结构体的基本信息,协议,IP, 端口等。
bind 函数将服务器信息与套接字描述符绑定。
listen 函数开始监听这个服务器套接字,三次握手就再这里。
我们对与每一个链接都给他开一个进程处理信息。
accept 函数用来完成三路握手完成链接,获取客户端信息,然后返回这个全双工的信息链接字。
它接收信息并且回射。
客户端部分
![](http://zmrlinux.com/wp-content/uploads/2016/03/2016-03-07-161909-%E7%9A%84%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE.png)
这个客户端的功能是,从命令行接收一行字符发送给服务器,然后服务器回射给他。
创建一个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/
相关文章推荐
- HTTP协议简介
- 计算机网络面试题
- 偷师饿了么:怎样用HTTP/2优化iOS APP网络层次架构?
- iOS安全系列之:HTTPS
- TCP三次握手与四次挥手
- 发送HTTP请求
- Android 本地加载网页&显示网络图片
- http://blog.csdn.net/yejin191258966/article/details/8453909 java中Statement详细用法。
- 使用HttpClient和WebRequest时POST一个对象的写法
- Application Transport Security has blocked a cleartext HTTP (http://) resource load since it is inse
- VMware-网络连接不成功问题
- Gerrit配置(http+postgresql+nginx)
- MVC 部署出错 ,HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容。
- 使用HttpClient和WebRequest时POST一个对象的写法
- 网络攻击类型及应对策略
- iOS Http协议与TCP协议简单理解
- 基于okhttp的Volley
- 基于OKHTTP的imageloader
- [置顶] Linux网络编程--服务端判断客户端断开的经验方法
- Nim 网络编程