跳转至
阅读量:

Go TCP 编程

Server

package main

import (
    "bufio"
    "fmt"
    "net"
)

func main() {
    listen, err := net.Listen("tcp", "127.0.0.1:12345")
    if err != nil {
        fmt.Println("listen failed, err:", err)
        return
    }

    for {
        conn, err := listen.Accept() // 建立连接
        if err != nil {
            fmt.Println("accept failed, err:", err)
            continue
        }
        go process(conn)
    }

}

func process(conn net.Conn) {
    defer conn.Close() // 关闭连接
    for {
        reader := bufio.NewReader(conn)
        var buf [1024]byte
        n, err := reader.Read(buf[:])
        if err != nil {
            fmt.Println("read from client failed, err:", err)
            break
        }
        fmt.Println("recv from client:", string(buf[:n]))
        conn.Write(buf[:n])
    }
}

Client

package main

import (
    "fmt"
    "net"
)

func main() {
    conn, err := net.Dial("tcp", "127.0.0.1:12345")
    if err != nil {
        fmt.Println("err :", err)
        return
    }
    defer conn.Close()
    for {
        _, err = conn.Write([]byte("hello world")) // 发送数据
        if err != nil {
            return
        }
        buf := [512]byte{}
        n, err := conn.Read(buf[:])
        if err != nil {
            panic(err)
            return
        }
        fmt.Println(string(buf[:n]))
    }
}

评论