使用单进程,单线程,非堵塞---完成多任务!

使用单进程,单线程,非堵塞—完成多任务!

代码如下:

import socket
import time

tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_server.bind(("", 7890))
tcp_server.listen(128)
tcp_server.setblocking(False)  # 设置套接字为非堵塞的方式

client_socket_list = list()  # 定义一个空列表用来保存到来的客户端

while True:
    time.sleep(0.5)  # 设置延迟 方便测试
    try:
        new_socket, new_addr = tcp_server.accept()
    except Exception as ret:
        print("----没有新的客户端到来----")
    else:
        print("----只要没有产生异常,那么也就是意味着 来了一个新的客户端----")
        new_socket.setblocking(False)  # 设置套接字为非堵塞的方式
        client_socket_list.append(new_socket)  # 把新客户端存入列表中

    for client_socket in client_socket_list:  # 遍历列表内的客户端
        try:
            recv_data = client_socket.recv(1024)
        except Exception as ret:
            print(ret)
            print("----这个客户端没有发送过来数据----")
        else:
            print("----没有异常----")
            print(recv_data)
            if recv_data:
                # 对方发送过来数据
                print("----客户端发送过来了数据----")
            else:
                # 对方调用close 导致了 recv返回
                client_socket.close()
                client_socket_list.remove(client_socket)  # 从列表中删除
                print("*"*10+"客户端已经关闭"+"*"*10)

你可能感兴趣的:(代码演示)