美文网首页
韩顺平尚硅谷TCP/IP例子1

韩顺平尚硅谷TCP/IP例子1

作者: FredricZhu | 来源:发表于2020-05-01 13:05 被阅读0次

server.go

package main

import (
    "fmt"
    "net"
)

func Handle(conn net.Conn) {
    for {
        buf := make([]byte, 1024)
        n, err := conn.Read(buf)
        if err != nil {
            fmt.Printf("客户端关闭连接, %v!!!\n", err)
            return
        }
        fmt.Print(string(buf[:n]))
    }
}

func main() {
    listen, err := net.Listen("tcp", "0.0.0.0:8888")
    if err != nil {
        fmt.Printf("创建监听失败, %v!!\n", err)
        return
    }

    defer listen.Close()
    fmt.Println("服务器端开始监听客户端的连接...\n")
    for {
        //此处阻塞等待客户端连接
        conn, err := listen.Accept()
        if err != nil {
            fmt.Printf("等待客户端连接失败, %v\n", err)
        }

        go Handle(conn)

    }
}

client.go

package main

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

func main() {
    conn, err := net.Dial("tcp", "192.168.3.6:8888")
    if err != nil {
        fmt.Printf("连接到服务器失败%v!!\n", err)
        return
    }

    defer conn.Close()

    for {
        reader := bufio.NewReader(os.Stdin)
        line, err := reader.ReadString('\n')
        if err != nil {
            fmt.Printf("从终端读取数据失败 %v!!\n", err)
            return
        }

        line = strings.Trim(line, " \r\n")
        if line == "exit" {
            fmt.Println("您已确定退出客户端程序\n")
            return
        }

        _, err = conn.Write([]byte(line + "\n"))
        if err != nil {
            fmt.Printf("向服务端写入数据失败%v!!\n", err)
        }
    }
}

相关文章

网友评论

      本文标题:韩顺平尚硅谷TCP/IP例子1

      本文链接:https://www.haomeiwen.com/subject/ldtqghtx.html