Feat: done tcp

This commit is contained in:
2025-11-10 10:02:55 +08:00
parent 78d89595a1
commit 9a39bcda40
17 changed files with 689 additions and 0 deletions

44
tcp/utils.go Normal file
View 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
}