You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
1.4 KiB
Go

//go:build client
package main
import (
"flag"
"fmt"
"log"
"os"
"time"
"github.com/noahlann/nnet/pkg/nnet"
)
// This example demonstrates client connecting to a protocol version server.
// Usage:
//
// go run ./examples/protocol_version/client.go -addr tcp://127.0.0.1:8082 -cmd version
// go run ./examples/protocol_version/client.go -addr tcp://127.0.0.1:8082 -cmd echo -data "hello"
func main() {
addr := flag.String("addr", "tcp://127.0.0.1:8082", "server address")
cmd := flag.String("cmd", "version", "command to send (version, echo)")
data := flag.String("data", "test", "data to send for echo command")
timeout := flag.Duration("timeout", 3*time.Second, "request timeout")
flag.Parse()
cfg := &nnet.ClientConfig{
Addr: *addr,
ApplicationProtocol: "nnet", // 指定应用层协议
ConnectTimeout: 3 * time.Second,
ReadTimeout: 3 * time.Second,
WriteTimeout: 3 * time.Second,
}
c := nnet.NewClient(cfg)
defer c.Close()
if err := c.Connect(); err != nil {
log.Fatalf("connect failed: %v", err)
}
defer c.Disconnect()
// 发送命令
var reqData string
if *cmd == "echo" {
reqData = *data
} else {
reqData = *cmd
}
resp, err := c.Request([]byte(reqData), *timeout)
if err != nil {
fmt.Fprintf(os.Stderr, "request error: %v\n", err)
os.Exit(1)
}
fmt.Printf("response: %s\n", string(resp))
}