#TCP网络编程

一、TCP介绍、编程流程

1.1 TCP介绍、编程流程

TCP回顾:

       1、面向连接的流式协议;可靠、出错重传、且每收到一个数据都要收到一个数据要给出相应的确认

        2、通信之前需要建立连接

        3、服务器被动连接

TCP与UDP的差异

         #TCP网络编程_第1张图片

#TCP网络编程_第2张图片

#TCP网络编程_第3张图片

二、TCP编程——socket

2.1 TCP套接字创建 

#TCP网络编程_第4张图片

#TCP网络编程_第5张图片

三、TCP客户端——connect、send、recv

3.1 connect

#TCP网络编程_第6张图片

3.2 send

#TCP网络编程_第7张图片

注意:

        不能用TCP协议发送0长度的数据包(UDP可以)

3.3 recv

#TCP网络编程_第8张图片

客户端:

#TCP网络编程_第9张图片

#TCP网络编程_第10张图片

#TCP网络编程_第11张图片

四、TCP服务器——bind、listen、accept

4.1 作为TCP服务器需要具备的条件

        1、具备一个可以确认可以知道的地址

        2、让操作系统知道一个是服务器,而不是客户端

        3、等待连接的到来

对于面向连接来的TCP协议来说,连接的建立才是真正以为着数据通信的开始

4.2 bind

#TCP网络编程_第12张图片

#TCP网络编程_第13张图片

4.3 listen

int listen(int sockfd , int backlog );
功能:
        将套接字由主动修改为被动
        使操作系统为该套接字设置一个连接队列,用来记录所有连接到该套接字的连接
参数:
        sockfd: socket 监听套接字
        backlog:连接队列的长度
返回值:
        成功:返回 0
        失败:其他
头文件:
        #include

4.4 accept

阻塞等待客户端的链接

#TCP网络编程_第14张图片

注意:

        accept之前包括accept都是用的sockfd的返回值,accept之后通信的时候用的是accept的返回值

服务器端:

#TCP网络编程_第15张图片

#TCP网络编程_第16张图片

#TCP网络编程_第17张图片

五、TCP编程——close、三次握手、四次挥手

5.1 close 关闭套接字

1 、使用 close 函数即可关闭套接字
        关闭一个代表已连接套接字将导致另一端接收到一个 0 长度的数据包
2 、做服务器时
        1>关闭监听套接字将导致服务器无法接收新的连接,但不会影响已经建立的连接
        2>关闭 accept 返回的已连接套接字将导致它所代表的连接被关闭,但不会影响服务器的监听
3、做客户端时
        关闭连接就是关闭连接,不意味着其他

5.2 三次握手

连接:

#TCP网络编程_第18张图片

5.3 四次挥手

关闭:

#TCP网络编程_第19张图片

六、TCP并发服务器

TCP不能实现并发的原因:

        由于TCP服务器端有两个读阻塞函数,accept和recv,两个函数需要先后运行,所以导致运行一个函数的时候另一个函数无法执行,所以无法保证一边连接客户端,一边与其他客户端通信。

6.1 多进程实现并发

#TCP网络编程_第20张图片

#TCP网络编程_第21张图片

#TCP网络编程_第22张图片

#TCP网络编程_第23张图片

#TCP网络编程_第24张图片

6.2 多线程实现并发

#TCP网络编程_第25张图片

#TCP网络编程_第26张图片

#TCP网络编程_第27张图片

#TCP网络编程_第28张图片

七、web服务器介绍

7.1 web服务器简介

web服务器又称为www服务器、网站服务器。

特点:

        1、使用HTTP协议栈与客户机浏览器进行信息交流

        2、不仅能存储信息,还能在用户通过web浏览器提供的信息的基础上运行脚本和程序

        3、该服务器可安装在UNIX、Linux或者Windows等操作系统上

        4、著名的服务器有Apache、Tomcat、IIS等

7.2 HTTP协议

7.2.1 webserver——HTTP协议

概念

        一种详细规定了浏览器和万维网服务器之间的互相通信规则,通过因特网传送万维网文档的数据传送协议。也就是超文本传输协议。

特点:

        1、支持C/S架构

        2、简单快速:客户像服务器请求服务时,只需要传送请求方法和路径,常用方法GET、POST

        3、无连接:限制每次连接只处理一个请求

        4、无状态:即如果后续处理需要前面的信息,它必须重传,这样可能导致每次连接传送的数据量会增大

7.2.2 Webserver 通信过程

#TCP网络编程_第29张图片

八、web编程开发

网页浏览(使用 GET 方式)
客户端浏览器请求:
#TCP网络编程_第30张图片
格式:
服务器收到的数据:
#TCP网络编程_第31张图片
服务器应答的格式:请求成功
#TCP网络编程_第32张图片
服务器应答的格式:请求失败
#TCP网络编程_第33张图片

你可能感兴趣的:(网络,tcp/ip,服务器)