03-tcp服务器增强

目标

  • 能够接收一个客户端发来的多条信息
  • 能够接受多个客户端连接

1. 可以接受客户端发来的多条信息

image-20180629145536795

image-20180818233322815

2. 可以允许多个客户端连接

image-20180629145623820

image-20180818234515283

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