补全:测 echo 服务端
测试用 run(*cases):静默跑 unittest,交回 (跑, 挂, 错) 三个数。
(每道题开头都有同一段:上面的内存版 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 在这儿会阻塞等)补全 echo_once(lis)(accept + 原样回 + close),让下面的测试通过。跑测试看 (跑/挂/错):
全部评论