补全:对面断了就收手
(每道题开头都有同一段:上面的内存版 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_loop(conn):不停 recv 原样回;一旦 recv 得到 b""(对面关了)就 close 并返回一共回了几段。客户端发两段再关,看回了几段。
全部评论