03-tcp服务器增强
目标
- 能够接收一个客户端发来的多条信息
- 能够接受多个客户端连接
1. 可以接受客户端发来的多条信息
2. 可以允许多个客户端连接
# tcp 服务端:
import socket
# 1、创建套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2、绑定ip和端口
tcp_server_socket.bind(("192.168.174.87", 8081))
# 3、监听,(让套接字由主动变为被动),此时 tcp_server_socket 只能接受客户端连接,不能发送数据
tcp_server_socket.listen(128)
# 4、可以接收客户端连接
# accept() 接收客户端连接,这个方法会让程序阻塞,直到有客户端连接,就解阻塞
# recv_data = tcp_server_socket.accept()
# recv_data 返回的是一个元组
# 第一个元素,服务器端生成的一个新的 socket
# 第二个元素,客户端的 ip和端口( address)
# print(recv_data[0])
# print(recv_data[1])
# new_client_socket 新的套接字
# ip_port 客户端的ip和端口
# 此处while True 的作用是,可以接收多个客户端连接
while True:
# 每个客户端连接成功后,分配一个新的套接字
new_client_socket, ip_port = tcp_server_socket.accept()
print("【新客户端来了】:", ip_port)
# 5、开始数据传输, recv
# 此处的while True,表示可以多次接收客户端的消息
while True:
recv_content = new_client_socket.recv(1024)
# 如果客户端断开了连接,此时recv_content 接收到的数据为空
if recv_content:
# 保存客户端发来的信息
re_text = recv_content.decode("gbk")
print("收到客户端信息:", re_text)
# 回复客户端
new_client_socket.send("好的,收到.".encode())
else:
print("客户端可能断开连接!")
break
# 6、关闭和当前客户端的连接,当前客户端不能在进行通信了
new_client_socket.close()
# 7、关闭服务器(服务器不再接受新的客户端连接),服务器不再接收新的客户端连接(老的连接,继续服务)
tcp_server_socket.close()