Files
inp2025/tcp/client.go
2025-11-10 11:07:36 +08:00

73 lines
1.2 KiB
Go

package tcp
import (
"encoding/json"
"net"
)
func Do(
addr, route string,
method Method,
params map[string]string,
body []byte,
) (*Response, error) {
conn, err := net.Dial("tcp", addr)
if err != nil {
return nil, err
}
defer conn.Close()
reqHeader := RequestHeader{
Method: method,
Route: route,
Params: params,
}
rawHeader, err := json.Marshal(reqHeader)
if err != nil {
return nil, err
}
if err := sendFrame(conn, rawHeader); err != nil {
return nil, err
}
if err := sendFrame(conn, body); err != nil {
return nil, err
}
rawHeader, err = readFrame(conn)
if err != nil {
return nil, err
}
var resHeader ResponseHeader
if err := json.Unmarshal(rawHeader, &resHeader); err != nil {
return nil, err
}
body, err = readFrame(conn)
if err != nil {
return nil, err
}
return &Response{
StatusCode: resHeader.StatusCode,
Body: body,
RemoteAddr: conn.RemoteAddr().String(),
}, nil
}
func Get(
addr, route string,
params map[string]string,
) (*Response, error) {
return Do(addr, route, MethodGET, params, nil)
}
func Post(
addr, route string,
params map[string]string,
b []byte,
) (*Response, error) {
return Do(addr, route, MethodPOST, params, b)
}