tcp三握四挥+服务端

tcp服务器

1、通信流程图

在这里插入图片描述

2、tcp三次握手(建立连接)

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
1、第一次握手:客户端要和服务端进行通信,首先要告知服务端一声,发出一个建立联机的请求信号(SYN)。
2、第二次握手:当服务端接收到客户端的连接请求,要给客户端一个确认信息(ACK)。
3、第三次握手:当客户端收到了服务端的确认连接信息后(ACK),告知服务端。建立连接结束。
在这里插入图片描述

3、数据传输

交流传递信息
在这里插入图片描述

4、tcp四次挥手(断开连接)

1、第一次挥手:客户端断开通信连接,告知服务端(FIN),自身处于等待结束连接的状态并确认(ACK)。
2、第二次挥手:服务器收到客户端的消息后,发出确认标志(ACK),进入等待关闭状态(FIN)。
3、第三次挥手:客户端继续处于等待结束的状态(FIN),服务器端也处于等待关闭连接状态,并告诉客户端,断开连接(FIN)并确认(ACK)。
4、第四次挥手:客户端告知服务端确认关闭操作断开连接(ACK),此时客户端就关闭自身连接,服务器端接收到客户端发来的确定通知就立刻关闭服务器端的连接。
在这里插入图片描述
tcp标志位:
SYN(synchronous建立联机)
ACK(acknowledgement 确认)
PSH(push传送)
FIN(finish结束)
RST(reset重置)
URG(urgent紧急)
Sequence number(顺序号码)
Acknowledge number(确认号码)

5、tcp短连接

在这里插入图片描述

6、tcp长连接

在这里插入图片描述

7、服务端

'''
创建一个基于tcp协议的服务端
'''
import socket

	#todo 1.0 创建一个套接字,连接客户端
tcp_server = socket.socket()

	#todo 2.0 服务器绑定IP和端口
tcp_server.bind(('',8080))

	#todo 3.0 监听
tcp_server.listen()

	#todo 4.0 等待客户端的连接
service_socket,address_info = tcp_server.accept()
#print(service_socket)
#print(address_info)

while True:

	#todo 5.0 接收客户端传递的消息
   data = service_socket.recv(1024)
#print('##################')
    print(data)
    data = data.decode()

	#todo 6.0 处理服务请求(拼接资源)
   data_list = data.split('\r\n')

	#todo 6.1 将客户端传递过来的报文进行切割,获取到客户端传递过来的路径
   first_line = data_list[0]
#print(first_line)
    first_line_list = first_line.split(' ')
#print(first_line_list)
    path = first_line_list[1]
    print('请求路径是',path)

	#todo 6.2 根据请求路径发送正确的资源给客户端
   if path == '/index':
        returndata = 'this is index'

   elif path == '/pic':
       	returndata = 'this is pic'

	#todo 6.3 按照正确的格式拼接响应报文

   response_first_line = 'HTTP/1.1 200 OK\r\n'
   responseheader = response_first_line + '\r\n'
   response = responseheader + returndata

	#todo 7.0 将客户端需要的数据发送给客户端
   service_socket.send(response.encode())

	#todo 8.0 销毁套接字
	#service_socket.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值