新闻中心

Golang如何用 net 包实现 TCP 通信_Golang net TCP 客户端与服务器实践

2025-11-14
浏览次数:
返回列表
Go语言通过net包实现TCP通信,先启动服务器监听端口,再运行客户端连接并收发消息。服务器使用net.Listen监听,Accept接收连接,并用goroutine处理每个连接;客户端通过net.Dial连接服务器,发送数据并读取回显。程序以换行符分隔消息,支持多客户端并发,体现Go的高并发优势。

golang如何用 net 包实现 tcp 通信_golang net tcp 客户端与服务器实践

Go 语言的 net 包提供了强大且简洁的 API 来实现 TCP 网络通信。通过它,你可以轻松构建高性能的 TCP 客户端与服务器。下面通过一个完整示例,展示如何使用 net 包实现基本的 TCP 通信。

1. 实现 TCP 服务器

使用 net.Listen 监听指定地址和端口,接受客户端连接,并并发处理每个连接。

package main

import (
    "bufio"
    "fmt"
    "log"
    "net"
")

func handleConnection(conn net.Conn) {
    defer conn.Close()

    fmt.Printf("来自 %s 的连接已建立\n", conn.RemoteAddr().String())

    reader := bufio.NewReader(conn)
    for {
        message, err := reader.ReadString('\n')
        if err != nil {
            fmt.Printf("连接断开: %s\n", conn.RemoteAddr().String())
            break
        }

        fmt.Printf("收到消息: %s", message)

        // 回显消息给客户端
        conn.Write([]byte("echo: " + message))
    }
}

func main() {
    listener, err := net.Listen("tcp", ":8080")
    if err != nil {
        log.Fatal("监听失败:", err)
    }
    defer listener.Close()

    fmt.Println("TCP 服务器启动,监听端口 :8080")

    for {
        conn, err := listener.Accept()
        if err != nil {
            log.Println("接受连接出错:", err)
            continue
        }

        // 每个连接开启一个 goroutine 处理
        go handleConnection(conn)
    }
}

2. 实现 TCP 客户端

客户端使用 net.Dial 连接到服务器,发送消息并接收响应。

Reachout.ai Reachout.ai

一个AI驱动的视频开发平台,专为忙碌的企业家和销售团队打造

Reachout.ai 142 查看详情 Reachout.ai
package main

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

func main() {
    conn, err := net.Dial("tcp", "localhost:8080")
    if err != nil {
        log.Fatal("连接失败:", err)
    }
    defer conn.Close()

    fmt.Println("已连接到服务器")

    go func() {
        reader := bufio.NewReader(conn)
        for {
            msg, err := reader.ReadString('\n')
            if err != nil {
                return
            }
            fmt.Print("服务端回显: ", msg)
        }
    }()

    // 从标准输入读取用户输入
    inputReader := bufio.NewReader(os.Stdin)
    for {
        line, _ := inputReader.ReadString('\n')
        conn.Write([]byte(line))
    }
}

3. 运行与测试

先启动服务器,再运行多个客户端进行测试:

  • 终端 1 执行:go run server.go
  • 终端 2 执行:go run client.go
  • 在客户端输入任意文本并回车,服务器会打印收到的消息,客户端会收到“echo”回应

支持多个客户端同时连接,每个连接由独立 goroutine 处理,体现 Go 并发优势。

4. 关键点说明

  • 协议选择:net.Listen 和 net.Dial 第一个参数为 "tcp"
  • 并发模型:Accept 后用 go 启动新协程处理,不阻塞主循环
  • 连接关闭:务必调用 conn.Close() 释放资源
  • 数据边界:本例以换行符 '\n' 分隔消息,实际应用中可使用固定长度、JSON 或 Protobuf
  • 错误处理:网络中断时 Read/Write 会返回错误,需合理退出或重连
基本上就这些。Go 的 net 包让 TCP 编程变得直观高效,结合 goroutine 能轻松构建高并发服务。

以上就是Golang如何用 net 包实现 TCP 通信_Golang net TCP 客户端与服务器实践的详细内容,更多请关注其它相关文章!


# json  # go  # golang  # go语言  # 端口  # ai  # js  # 襄樊市整合营销推广  # seo优化排名前10位  # 莆田做搜狗seo  # 保定上海网站建设  # 岳麓区教育公司网站建设  # 关键词的排名优化靠谱  # 宣城推广营销运营中心  # seo工作有哪些  # 金融行业网站seo宣传  # 南阳seo学校  # 如何在  # 换行符  # 第一个  # 你可以  # 资源管理  # 连接到  # 多个  # 如何用  # 加载  # 客户端 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: MinIO大规模对象列表性能瓶颈深度解析与外部元数据管理策略  C++ string find函数返回值npos详解_C++字符串查找失败的判断条件  Linux如何构建多环境配置管理_Linux多环境配置方案  Win10如何清理注册表垃圾 Win10手动清理无效注册表【技巧】  钉钉视频会议画面卡顿如何解决 钉钉会议画面优化方法  Mac怎么使用表情符号_Mac Emoji快捷键面板  一加 Nord 5 隐私权限异常_一加 Nord 5 系统安全优化  凉拌黄瓜怎么拌更入味 凉拌黄瓜简单家常做法  QQ邮箱正确登录入口_QQ邮箱官方网站使用地址  Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接  C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责  漫蛙2正版漫画站 漫蛙2网页版快速访问入口  Discord Slash 命令响应超时问题的异步解决方案  QQ邮箱登录首页官网地址2026 QQ邮箱官方网页入口  深入理解J*a合成构造器:何时以及为何阻止其生成  怎样在Excel中做仪表盘_Excel仪表盘设计与关键指标展示方法  Win11怎么设置开机NumLock亮 Win11修改注册表InitialKeyboardIndicators值  CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠  《噬血代码2》新预告片发布 展示游戏剧情  composer 和 npm/yarn 在管理依赖方面有什么核心思想差异?  Windows 11怎么彻底关闭定位_Windows 11服务中禁用Geolocation  PHP 枚举:根据字符串获取枚举案例的策略与实现  CSS Flexbox如何实现多行排列_flex-wrap wrap自动换行显示  如何将HTML表格多行数据保存到Google Sheet  sublime怎么格式化代码_sublime代码美化与一键排版插件配置  如何使用Node.js csv 包按条件移除含空字段的CSV记录  qq游戏大厅官方下载_qq游戏免费下载安装入口  免费抖音短视频入口_抖音网页版短视频免费通道  微信怎么把收藏的内容分类管理 微信收藏内容标签分类方法  抖音商城签到领现金是真的吗_抖音商城签到奖励与提现说明  包子漫画官方网站在线链接-包子漫画在线阅读平台主页地址  Excel如何用迷你图显趋势_Excel用迷你图显趋势【趋势小图】  怎样更改Windows系统的默认安装路径_避免C盘爆满的终极设置【技巧】  在J*a中如何开发简易电子商务商品管理系统_商品管理系统项目实战解析  Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】  Win11怎么开启省电模式_Win11电池节电模式自动开启  如何使用纯J*aScript判断Input元素是否在特定类容器内  快速CSGO开箱网站指南 CSGO开箱平台推荐  Python:递归比较文件夹内容并找出特定类型文件的差异  海量存储:机器视觉智能化的核心基石  PyTorch模型训练准确率不提升:诊断与修复常见指标计算错误  HTML长属性值处理:表单action路径优化与代码规范应对  汽水音乐车机版横屏版7.1 汽水音乐车机版横屏版下载入口  AO3网页版最新入口合集 Archive of Our Own在线访问指南  如何使用 Excel 发布器与 Power BI 分享 Excel 洞察  sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件  Win11怎么开启高性能模式_Windows 11电源计划优化设置  VS Code远程开发时如何处理文件权限问题  怎样把文件彻底粉碎无法恢复_Windows下安全删除敏感数据【隐私保护】  如何有效阻止外部脚本意外修改内联样式的高度属性 

搜索