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()