TCP通信

套接字-Socket

TCP是一个面向连接的,安全的,流式传输协议,这个协议是一个传输层协议。

1. 面向连接:是一个双向连接,通过三次握手完成,断开连接需要通过四次挥手完成。

三次握手:

客户端->服务器:发出连接请求

服务器->客户端:同意并发出连接请求

客户端->服务器:同意连接

四次挥手(谁先都行):

客户端->服务器:断开连接请求

服务器->客户端:同意并发出断开请求

客户端与服务器断开连接(单向)

服务器->客户端:断开连接请求

客户端->服务器:同意

程序员只需调用相关函数即可,该过程将在底层完成

2. 安全:tcp通信过程中,会对发送的每一数据包都会进行校验, 如果发现数据丢失, 会自动重传

3. 流式传输:发送端和接收端处理数据的速度,数据的量都可以不一致

通信流程

服务器流程

1.创建用于监听的套接字,这是一个文件描述符

int lfd = socket();//监听是否有客户端发起连接请求

 2.将得到的监听的文件描述符和本地的IP 端口进行绑定

bind();//端口用于定位主机中的某个进程

3.设置监听(成功之后开始监听, 监听的是客户端的连接)

listen();//监听客户端请求,即启动操作一

4.等待并接收客户端的请求,建立新的连接,会得到一个新的文件描述符(用于通信,有N个客户端就有N个描述符)没有新连接请求就阻塞

int cfd = accept();

5.通信,读写操作默认都是阻塞的

//接收数据
read(); / recv();
//发送数据
write(); / send();

6.断开连接, 关闭套接字

close();//即服务器端进行两次挥手

客户端流程

在单线程的情况下客户端通信的文件描述符有一个,没有监听的文件描述符

1.创建一个通信的套接字

int cfd = socket();

2.连接服务器, 需要知道服务器绑定的IP和端口

connect();

3.通信

//接收数据
read(); / recv();
//发送数据
write(); / send();

4.断开连接, 关闭套接字

close();//即客户端进行两次挥手

PS:必须先启动服务器端再启动客户端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值