TCP简介:
●TCP 面向连接、可靠的、基于字节流的传输控制协议
●TCP的特点
○面向连接
○可靠传输
■应答机制
■超时重传
■错误校验
■流量管控
●TCP通信模型
TCP严格区分客户端、服务端
tcp通信模型:
客户端代码:
# 1﹑导入socket模块
import socket
# 2·创建socket套接字
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 3·建立tcp连接(和服务端建立连接)
address = ("192.168.52.2", 8080)
tcp_client_socket.connect(address)
# 4·开始发送数据(到服务端)
tcp_client_socket.send("你好,世界!".encode("gbk"))
# 接收数据:二进制数据
recv_data = tcp_client_socket.recv(1024)
recv_text = recv_data.decode("gbk")
print("收到数据:", recv_text)
# 5·关闭套接字
tcp_client_socket.close()
服务端代码:
1.能够接受一个客户端的多条信息
2.能够接受多个客户端连接
目前是单线程,只有第一个客户端断开连接后第二个客户端才能连接,多线程可实现多个客户端同时连接收发消息
import socket
# 1.socket创建一个套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.bind绑定ip和port,默认本地ip地址
address = ("", 10000)
tcp_server_socket.bind(address)
# 3.开启监听,listen使套接字变为可以被动链接,允许接受最大连接数
tcp_server_socket.listen(128)
while True:
# 4.accept等待客户端的链接,返回一个新的套接字和客户端的ip地址端口号,此套接字负责和客户端通信
recv_data = tcp_server_socket.accept()
# 5.recv/send接收发送数据
new_client_socket, client_ip_port = recv_data
print(f"{client_ip_port} 已连接……………………")
while True:
recv_data = new_client_socket.recv(1024)
# 当接受到为空时说明客户端已经断开连接,服务器也应该断开,非空即为真:
if recv_data:
recv_text = recv_data.decode("gbk")
print(f"接收到来自{str(client_ip_port)}的信息:{recv_text}")
else:
print("客户端已经断开连接!!!!")
break
# 关闭本次通信连接
new_client_socket.close()
# 6.关闭服务器连接
tcp_server_socket.close()