Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
90 lines (71 sloc) 1.88 KB

另一个版本的 TCP 客户端

Go 提供了一个不同的函数集,也可以开发 TCP 客户端和服务器。在这一节,您将学习使用这些函数来编写 TCP 客户端。

TCP 客户端命名为 otherTCPclient.go,它有以下四部分。第一段代码:

package main

import(
    "bufio"
    "fmt"
    "net"
    "os"
    "strings"
)

第二段代码:

func main() {
    arguments := os.Args
    if len(arguments) == 1 {
        fmt.Println("Please provide a server:port string!")
        return
    }

    CONNECT := arguments[1]
    tcpAddr, err := net.ResolveTCPAddr("tcp4", CONNECT)
    if err != nil {
        fmt.Println("ResolveTCPAddr:", err.Error())
        return
    }

net.ResolveTCPAddr() 函数返回一个 TCP 终点地址(类型是 TCPAddr),并且只能用于 TCP 网络。

第三段代码:

    conn, err := net.DialTCP("tcp4", nil, tcpAddr)
    if err != nil {
        fmt.Println("DialTCP:", err.Error())
        return
    }

net.DialTCP() 函数相当于 net.Dial() 对 TCP 网络。

最后的代码:

    for {
        reader := bufio.NewReader(os.Stdin)
        fmt.Print(">> ")
        text, _ := reader.ReadString('\n')
        fmt.Fprintf(conn, text + "\n")

        message, _ := bufio.NewReader(conn).ReadString('\n')
        fmt.Print("->: " + message)
        if strings.TrimSpace(string(text)) == "STOP" {
            fmt.Println("TCP client exiting...")
            conn.Close()
            return
        }
    }
}

执行 otherTCPclient.go,并与 TCP 服务交互将产生如下输出:

$ go run otherTCPclient.go localhost:8001
>> Hello from otherTCPclient.go!
->: Hi from netcat!
>> STOP
->:
TCP client exiting...

对于这个例子,TCP 服务器使用 netcat(1) 工具,执行输出如下:

$ nc -l 127.0.0.1 8001
Hello from otherTCPclient.go!

Hi from netcat!
STOP
You can’t perform that action at this time.