补全:广播给所有人
(每道题开头都有同一段:上面的内存版 TCP。)
贯穿全条的内存版 TCP(判题机不联网;接口和真 socket 一样,真机上把它换成 socket.socket() 就是真的):
net = Net()
lis = listen(net, 9000) 服务端开监听
cli = connect(net, 9000) 客户端连上——交回客户端这一头;服务端那一头进 accept 队列
srv = lis.accept() 服务端领一条新连接(一个新端点,lis 继续监听)
cli.sendall(b"...") / srv.recv(n) send 把字节追加进对面的收缓冲;recv 从自己的收缓冲拿最多 n 字节——拿到多少算多少,不保证是「一条消息」
x.close() 关了之后,对面 recv 交回 b"";收缓冲空又没关时 recv 抛 BlockingIOError(真 socket 在这儿会阻塞等)聊天室:一条消息要发给所有已连的客户端。补全 broadcast(srvs, msg):把 msg 发给每个连接,交回发了几个。三条连接,看它们各收到什么。
全部评论