package main
import (
"bufio"
"fmt"
"net"
"time"
)
type Client struct {
conn net.Conn
}
func (c *Client) Write(content string) error {
_, err := c.conn.Write([]byte(content + "\n"))
return err
}
func (c *Client) Read() (string, error) {
reader := bufio.NewReader(c.conn)
return reader.ReadString('\n')
}
func (c *Client) Close() error {
return c.conn.Close()
}
// create tcp client
func getClient(address string) (*Client, error) {
// try to resolve address
_, err := net.ResolveTCPAddr("tcp", address)
if err != nil {
return nil, err
}
// create tcp connection with 5s timeout
conn, err := net.DialTimeout("tcp", address, 5*time.Second)
if err != nil {
return nil, err
}
conn.SetReadDeadline(time.Now().Add(5 * time.Second))
conn.SetWriteDeadline(time.Now().Add(5 * time.Second))
return &Client{conn: conn}, nil
}
func main() {
// see https://tcpbin.com/
client, err := getClient("tcpbin.com:4242")
if err != nil {
panic(err)
}
// close the connection at the end
defer client.Close()
// send request to tcpbin.com echo server
err = client.Write("Hello, World!!!")
if err != nil {
panic(err)
}
// read response from tcpbin.com echo server
content, err := client.Read()
if err != nil {
panic(err)
}
fmt.Print(content)
}
// $ go run main.go
// Hello, World!!!
This example should give a basic understanding of how to create a TCP client in Go.