使用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
        }
    }
}
相关推荐
青岛前景互联信息技术有限公司31 分钟前
以新标准为底座,前景互联打造高危场景智能接处警新体系
大数据·网络·人工智能
大飞记Python1 小时前
Linux命令速查手册(测试开发4年实战总结,附PDF)
linux·网络·pdf
卖萌的斜阳1 小时前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
单片机·网络协议·tcp/ip
Sirius Wu1 小时前
OpenClaw(UpClaw)三层Tool全链路治理深度详解
网络·人工智能·架构·aigc
源图客1 小时前
云途物流API开发-鉴权认证(Java)
java·网络·python
huashengzsj2 小时前
Shopify个人建站如何搭建独立站:从零开始的完整指南
前端·网络·人工智能
云飞云共享云桌面3 小时前
单机建模卡顿运维繁琐!中小型机械制造厂云飞云 3D 云桌面落地
运维·服务器·网络·3d·自动化·电脑·负载均衡
mounter6253 小时前
BPF 的进化史:从网络过滤器到 AI 时代的 Linux 核心引擎
linux·网络·人工智能·ebpf·linux kernel·kernel
CryptoPP3 小时前
BSE股票K线数据接入实战:从接口调用到前端图表展示
大数据·前端·网络·人工智能·websocket·网络协议
ITxiaobing20233 小时前
程序化广告RTB场景下IP地理定位服务的精度与工程架构选型
网络协议·tcp/ip·架构