GOLAND TCP通信功能 (agent功能)

180it 2021-10-03 AM 1620℃ 0条

服务器端:

package main

import (
    "net"
    "fmt"
    "os"
)


func ServerHandleError(err error,when string) {
    if err != nil {
        fmt.Println(err, "net.Listen")
        os.Exit(1)

    }
}


func main(){


    //创建链接
    listener, err := net.Listen("tcp", "127.0.0.1:8080")
    ServerHandleError(err,"net.Listen")

    //循环接入所有客户端,得到专线链接
    for{
        conn, e := listener.Accept()
        ServerHandleError(e,"listener.Accept()")

        //开辟一条独立携程,与该客户端聊天
        go ChatWith(conn)

    }
}

//在专线中与客户端对话
func ChatWith(conn net.Conn) {

    //创建一个消息缓冲区,创建个桶
    buffer := make([]byte, 1024)


    //一个完整的消息回合
    for{

    //先听他说什么,读取客户端发来的消息,存入缓冲区
    n, err := conn.Read(buffer)
    ServerHandleError(err,"conn.Read(buffer)")

    //拿桶接收,消息,转换打印出来
    clientMsg := string(buffer[0:n])
    fmt.Printf("收到%v的消息: %s\n",conn.RemoteAddr(),clientMsg)

    //如果信息里包含off 便断开会话
    if clientMsg!="off"{
        //在回复他 已阅,自动回复客户端消息
        conn.Write([]byte("已阅:"+clientMsg))
    }else {
        conn.Write([]byte("拜拜:"+clientMsg))
        break
    }


    }
    //断开客户端链接
    conn.Close()
    fmt.Printf("客户端: %s 已经断开链接..",conn.RemoteAddr())

}

客户端:

package main

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



func ClentHandleError(err error,when string) {
    if err != nil {
        fmt.Println(err, "net.Listen")
        os.Exit(1)

    }
}





func main()  {

    //拨号远程地址,建立tcp远程链接
    conn, err := net.Dial("tcp", "127.0.0.1:8080")
    ClentHandleError(err,"net.Dial")

    //准备消息缓冲区
    buffer := make([]byte, 1024)


    //建议标准输入的读取器(就是从命令行读取用户输入)
    reader := bufio.NewReader(os.Stdin)


    //源源不断的收发消息
    for  {

        //一个完整的消息回合
    //接收命令行输入,每行消息
    lineBytes, _, _ := reader.ReadLine()

    //向服务断发送
    conn.Write(lineBytes)

    //接收服务端消息,存入消息缓冲区,长度是n字节,转换成字符串并且打印
    n, err := conn.Read(buffer)
    ClentHandleError(err,"conn.Read")
    serverMsg := string(buffer[0:n])
    fmt.Println("服务器: ",serverMsg)

    //如果客户端说bye 就退出消息循环
    if serverMsg=="bye"{
        break
    }

    }
    fmt.Println("GAME OVER!")
}

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

GOLAND TCP通信功能 (agent功能)