Skip to content

Instantly share code, notes, and snippets.

@eiyaya
Created October 18, 2018 23:51
Show Gist options
  • Save eiyaya/152e76061f0ca0898a541f046f88dd54 to your computer and use it in GitHub Desktop.
Save eiyaya/152e76061f0ca0898a541f046f88dd54 to your computer and use it in GitHub Desktop.
read from tcp conn
buff := make([]byte, 1024)
c := bufio.NewReader(conn)
for {
// read a single byte which contains the message length
size, err := c.ReadByte()
if err != nil {
return err
}
// read the full message, or return an error
_, err := io.ReadFull(c, buff[:int(size)])
if err != nil {
return err
}
fmt.Printf("received %x\n", buff[:int(size)])
}
// Sender
// create the length prefix
prefix := make([]byte, 4)
binary.BigEndian.PutUint32(prefix, uint32(len(message)))
// write the prefix and the data to the stream (checking errors)
_, err := conn.Write(prefix)
_, err = conn.Write(message)
// Reader
// read the length prefix
prefix := make([]byte, 4)
_, err = io.ReadFull(conn, prefix)
length := binary.BigEndian.Uint32(prefix)
// verify length if there are restrictions
message = make([]byte, int(length))
_, err = io.ReadFull(conn, message)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment