Feat: done tcp
This commit is contained in:
44
tcp/utils.go
Normal file
44
tcp/utils.go
Normal file
@@ -0,0 +1,44 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user