新闻中心
Golang如何用 net 包实现 TCP 通信_Golang net TCP 客户端与服务器实践
Go语言通过net包实现TCP通信,先启动服务器监听端口,再运行客户端连接并收发消息。服务器使用net.Listen监听,Accept接收连接,并用goroutine处理每个连接;客户端通过net.Dial连接服务器,发送数据并读取回显。程序以换行符分隔消息,支持多客户端并发,体现Go的高并发优势。

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
一个AI
驱动的视频开发平台,专为忙碌的企业家和销售团队打造
142
查看详情
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 会返回错误,需合理退出或重连
以上就是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下安全删除敏感数据【隐私保护】
如何有效阻止外部脚本意外修改内联样式的高度属性


2025-11-14
浏览次数:次
返回列表