使用go语言实现简单的tcp通信功能

啥都不说了,直接上代码

服务端Server

Go 复制代码
//Server.go
package main

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

func main(){
    //服务端在本机8888端口建立tcp监听
    listener,err :=net.Listen("tcp","127.0.0.1:8888")
    ServerHandleError(err,"net.listen")

    for {
        //循环接入所有客户端得到专线连接
        conn,e := listener.Accept()
        ServerHandleError(e,"listener.accept")
        //开辟独立协程与该客聊天
        go ChatWith(conn)
    }
}

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

//在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("收到消息",conn.RemoteAddr(),clientMsg)

        //回复客户端消息
        if clientMsg != "im off" {
            conn.Write([]byte("已读:"+clientMsg))
        } else {
            conn.Write([]byte("bye"))
            break
        }
    }
    conn.Close()
    fmt.Printf("客户端断开连接",conn.RemoteAddr())
}

客户端Client

Go 复制代码
//Client.go
package main

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

func ClientHandleError(err error, when string){
    if err != nil {
        fmt.Println(err, when)
        os.Exit(1)
    }
}

func main(){
    //拨号远程地址,简历tcp连接
    conn, err := net.Dial("tcp","127.0.0.1:8888")
    ClientHandleError(err, "client conn error")

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

    //准备命令行标准输入
    reader := bufio.NewReader(os.Stdin)
    
    for {
        lineBytes,_,_ := reader.ReadLine()
        conn.Write(lineBytes)
        n,err := conn.Read(buffer)
        ClientHandleError(err, "client read error")
        
        serverMsg := string(buffer[0:n])
        fmt.Printf("服务端msg",serverMsg)
        if serverMsg == "bye" {
            break
        }
    }
}
相关推荐
哼?~1 分钟前
Linux--网络基础
网络
苏渡苇1 小时前
Docker 网络完全指南
网络·docker·容器·docker容器·容器通信
宁瑶琴1 小时前
COBOL语言的云计算
开发语言·后端·golang
风曦Kisaki3 小时前
# Linux 磁盘查看命令详解:df 与 du
linux·运维·网络
攻城狮在此3 小时前
华为交换机Console口密码如何清除
运维·网络·华为
hhcgchpspk4 小时前
网速上传下载流量监测工具尝试
网络·python·cmd·psutil
亚空间仓鼠5 小时前
OpenEuler系统常用服务(四)
linux·运维·服务器·网络
刘佬GEO5 小时前
【无标题】
网络·人工智能·搜索引擎·ai·语言模型
中议视控5 小时前
展厅和会议网络可编程中央控制系统主机支持HomeKit技术和BACnet网络
网络
昪彧翀忞5 小时前
dhcp小实验
linux·服务器·网络