补全:读一行回复
补全 read_reply:收一行、去掉末尾换行、解码成字符串。
贯穿全条的内存版 TCP(判题机不联网;接口和真 socket 一样,真机上换成 socket.socket() 就是真的):net = Net();lis = listen(net, 端口) 开监听;cli = connect(net, 端口) 客户端连上(交回客户端这头,服务端那头进 accept 队列);srv = lis.accept() 领一条连接;sendall 把字节追加进对面收缓冲,recv(n) 从自己收缓冲取最多 n 字节(拿到多少算多少,recv 交回 b"" 表示对面关了)。
贯穿的应用层协议(一行一命令、按换行切):req(*parts) 用空格连、末尾加换行;decode(line) 拆成 (命令, 参数表);handle(store, line):PUT k v→OK、GET k→值或 NONE、DEL k→OK/NONE、其它→ERR。
客户端:send_req(cli,*parts) 发一条;read_reply(cli) 收一行回复去掉换行;roundtrip(net,port,store,*parts) 一次完整来回。
全部评论