package tcp import ( "encoding/binary" "io" "net" ) const ( LengthPrefixSize = 4 ) func readFrame(conn net.Conn) ([]byte, error) { lengthBytes := make([]byte, LengthPrefixSize) _, err := io.ReadFull(conn, lengthBytes) if err != nil { return []byte{}, err } messageLength := binary.BigEndian.Uint32(lengthBytes) payload := make([]byte, messageLength) _, err = io.ReadFull(conn, payload) if err != nil { return []byte{}, err } return payload, nil } func sendFrame(conn net.Conn, data []byte) error { messageLength := uint32(len(data)) lengthBytes := make([]byte, LengthPrefixSize) binary.BigEndian.PutUint32(lengthBytes, messageLength) _, err := conn.Write(lengthBytes) if err != nil { return err } _, err = conn.Write(data) return err }