import socket
'''
用来验证协程的实现原理,除了多进程是直接进行多个任务进行,多线程和多线程的本质都是运用阻塞时间处理其他数据
进程是并行的,真正的同时运行;线程和协程是并发的,是运用间隔时间轮流调用
'''
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_socket.bind(('', 8080))
tcp_socket.listen(128)
tcp_socket.setblocking(False) # 设置套接字为非堵塞的方式,解除accept()阻塞
client_socket_list = list()
while True:
try:
new_socket, new_addr = tcp_socket.accept()
except Exception as e:
print('没有新的客户端到来')
else:
client_socket_list.append(new_socket)
print('没有异常产生,来了一个客户端')
new_socket.setblocking(False) # 将新的套接字设置套接字为非堵塞的方式,解除调用recv方法的等待客户端发送数据时的阻塞
for client_socket in client_socket_list:
try:
recv_data = client_socket.recv(1024)
except Exception as e:
print('这个客户端还有没发送数据过来')
else:
print('已经收到这个客户端的信息')
print(recv_data)
if recv_data:
print("客户端发送数据中")
else: # 客户端调用了close(),导致传送过来的数据为空
client_socket.close() #关闭这个套接字
client_socket_list.remove(client_socket) # 这个套接字已经完成交互,将其移除出列表