TCP:传输控制协议(Transmission Control Protocol)
是一种面向连接,可靠的,基于字节流的传输层通信协议
在七层模型中,他属于传输层,建立主机到端口之间的连接
数据传输需要进行“三次握手,四次挥手”的行为:
三次握手:
客户端向服务端发送一个寻址请求码seq = 100,服务端向客户端返回一个应答ack=101
客户端向服务端发送一个确认请求码seq = 101,服务端向客户端返回一个应答ack=201
客户端向服务端发送一个连接请求码seq = 201,服务端向客户端返回一个应答ack=301
客户端可以与服务端之间开始进行数据交互
四次挥手:
客户端向服务端发送一个数据验证请求码seq = 100,服务端向客户端返回一个应答ack=101
客户端向服务端发送一个传输结束标记seq = 101,服务端向客户端返回一个应答ack=201
客户端向服务端发送一个确认结束标记seq = 201,服务端向客户端返回一个应答ack=301
客户端向服务端发送一个断开连接标记seq = 301,服务端向客户端返回断开连接应答ack=401
服务端开发
'''TCP服务端模块'''
# 引入需要的模块
import socket
# 定义连接信息
HOST = ''
PORT = 8080
ADDRESS = (HOST, PORT)
# 定义一个读写数据的缓冲字节大小
BUFFER = 1024
# 创建一个TCP服务端套接字对象
#tcp_server = socket.socket()
tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定主机端口号
tcp_server.bind(ADDRESS)
# 监听端口:参数~排队的客户端
tcp_server.listen(5)
while True:
# 等待客户端的接入,建立连接
print("waiting for connect...")
server_socket, addr = tcp_server.accept()
print("client already connect! welcome to server: ", addr)
while True:
# 发送一个欢迎消息给客户端
info = input("请输入您要发送的消息:")
server_socket.send(info.encode("utf-8"))
# 接受客户端发送的消息
msg = server_socket.recv(BUFFER)
print("client:", msg.decode("utf-8"))
if msg == b'BYE':
# 关闭套接字,释放资源
server_socket.close()
break
客户端开发:
'''TCP客户端'''
# 引入需要的模块
import socket
# 定义连接信息
TARGET_HOST = '192.168.209.1'
TARGET_PORT = 8080
TARGET_ADDRESS = (TARGET_HOST, TARGET_PORT)
BUFFER = 1024
# 创建一个TCP套接字对象
tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接指定的主机
tcp_client.connect(TARGET_ADDRESS)
# 收发消息
while True:
# 接受服务器消息
msg = tcp_client.recv(BUFFER)
print("server:", msg.decode("utf-8"))
# 向服务器发送消息
info = input("请输入您要发送的消息:")
tcp_client.send(info.encode("utf-8"))
if info == "BYE":
# 关闭套接字
tcp_client.close()
break
print("客户端退出")