我有一些用于自定义协议的 Go 客户端。该协议是 lz4 压缩的 JSON-RPC,带有一个四字节的标头,给出了压缩 JSON 的长度。func ReceiveMessage(conn net.Conn) ([]byte, error) { start := time.Now() bodyLen := 0 body := make([]byte, 0, 4096) buf := make([]byte, 0, 256) for bodyLen == 0 || len(body) < bodyLen { if len(body) > 4 { header := body[:4] body = body[:4] bodyLen = int(unpack(header)) } n, err := conn.Read(buf[:]) if err != nil { if err != io.EOF { return body, err } } body = append(body, buf[0:n]...) now := time.Now() if now.Sub(start) > time.Duration(readTimeout) * time.Millisecond { return body, fmt.Errorf("Timed-out while reading from socket.") } time.Sleep(time.Duration(1) * time.Millisecond) } return lz4.Decode(nil, body)}客户端:func main() { address := os.Args[1] msg := []byte(os.Args[2]) fmt.Printf("Sending %s to %s\n", msg, address) conn, err := net.Dial(address) if err != nil { fmt.Printf("%v\n", err) return } // Another library call _, err = SendMessage(conn, []byte(msg)) if err != nil { fmt.Printf("%v\n", err) return } response, err := ReceiveMessage(conn) conn.Close() if err != nil { fmt.Printf("%v\n", err) return } fmt.Printf("Response: %s\n", response)}当我调用它时,我没有得到响应,它只是超时。(如果我没有明确忽略 EOF,它会返回 io.EOF 错误。)我有另一个用 Python 编写的库,它也适用于具有相同负载的相同端点。你马上看到什么了吗?
2 回答
- 2 回答
- 0 关注
- 363 浏览
添加回答
举报
0/150
提交
取消