前言

通过 Golang 的原生包 net 可以创建一个 TCP 的进程来进行通信,这里分别通过两个代码,一个实现客户端,一个实现服务端,使用客户端发送消息,然后服务端来接受
首先我们看下代码

客户端代码

package main

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

func main() {
    conn, err := net.Dial("tcp", "127.0.0.1:9080")
    defer conn.Close()
    if err != nil {
        fmt.Printf("connect failed, err: %v\n", err)
        return
    }

    inputReader := bufio.NewReader(os.Stdin)
    for {
        input, err := inputReader.ReadString('\n')
        if err != nil {
            fmt.Printf("read from console failed, err: %v\n", err)
            break
        }

        trimmedInput := strings.TrimSpace(input)
        if trimmedInput == "Q" {
            break
        }

        _, err = conn.Write([]byte(trimmedInput))
        if err != nil {
            fmt.Printf("write failed, err: %v\n", err)
            break
        }
    }
}

服务端代码

package main

import (
    "fmt"
    "net"
)

func main() {
    listener, err := net.Listen("tcp", "0.0.0.0:9080")
    if err != nil {
        fmt.Printf("listen failed, err: %v\n", err)
        return
    }
    for {
        conn, err := listener.Accept()
        if err != nil {
            fmt.Printf("accept fail, err: %v\n", err)
            continue
        }

        go process(conn)
    }
}

func process(conn net.Conn) {
    defer conn.Close()
    for {
        var buf [128]byte
        n, err := conn.Read(buf[:])

        if err != nil {
            fmt.Printf("read from connect failed,err :%v\n", err)
            break
        }
        str := string(buf[:n])
        fmt.Printf("receive from client: %v\n", str)
    }
}

实现效果

启动 server 端以及 client 端
我们客户端发送消息,然后可以在服务端收到消息
启动:

服务端成功收到消息:

最后修改:2020 年 07 月 30 日 10 : 49 AM