使用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
        }
    }
}
相关推荐
不昀8 小时前
VOOHU沃虎:音频变压器的匝数比和阻抗比如何换算?
网络·音视频·以太网·网络通信·电子元器件
yqcoder8 小时前
数据的“包装方式”:深入解析 HTTP Content-Type
网络·网络协议·http
z202305089 小时前
RDMA之RoCEv2 无损网络PFC 、DCQCN 和ECN (7)
linux·服务器·网络·人工智能·ai
凯瑟琳.奥古斯特9 小时前
传输层核心功能解析
开发语言·网络·职场和发展
jiayong2310 小时前
前端面试题库 - 浏览器与网络篇
前端·网络·面试
pengyi87101510 小时前
共享 IP 防封维护策略,降低被封率、延长 IP 寿命
网络·网络协议·tcp/ip
制造业的搬运工10 小时前
高端电路板哪家好:专业视角下的选择逻辑
网络·pcb工艺·pcb
Yeats_Liao10 小时前
物联网接入层技术剖析(二):epoll到底是怎么工作的
java·linux·网络·物联网·信息与通信
机器学习之心11 小时前
基于贝叶斯优化超参数的图卷积网络(BO-GCN)分类预测模型(附实验文档+Matlab代码)
网络·matlab·分类·分类预测模型·bo-gcn
上海云盾-小余11 小时前
内网终端安全管控:筑牢企业内部网络入侵防火墙
服务器·网络·安全