服务端
1 import socket 2 import select #同步io 3 sock = socket.socket() 4 sock.bind(("127.0.0.1",8000)) 5 sock.listen(5) 6 sock.setblocking(False) #非阻塞链接(False) 7 inputs = [sock,] 8 while True: 9 a, b, c = select.select(inputs, [], []) #监控(sock连接以及收发内核态存储的数据)10 for obj in a:11 if obj == sock:12 conn, addr = obj.accept()13 inputs.append(conn)14 print(conn)15 16 else:17 while True: # 通信循环,18 #解决有多个client端同时连接,若其中一个捣蛋关闭己端连接,那么对端跟着被中断19 try:20 data = obj.recv(1024)21 print(data.decode('utf-8'))22 send_data = input(">>>")23 if len(send_data) == 0: break24 obj.send(send_data.encode('utf-8'))25 26 except Exception as e:27 break
#select()的都是基于单线程的并发操作(非阻塞的socket连接)
#select()方法接收并监控3个通信列表, 第一个是所有的输入的data,就是指外部发过来的数据, # 第2个是监控和接收所有要发出去的data(outgoing data), # 第3个监控错误信息,接下来我们需要创建2个列表来包含输入和输出信息来传给select(). #监控客户端发来的连接跟 监听io的读写客户端
1 import socket2 sock = socket.socket()3 sock.connect(("127.0.0.1",8000))4 while True:5 send_data = input(">>>")6 sock.send(send_data.encode('utf-8'))7 recv_data = sock.recv(1024)8 print(recv_data.decode('utf-8'))