如何使用Golang创建TCP连接_Golang net Dial与Listen TCP使用方法


Go语言TCP编程核心是net.Dial(客户端连接)和net.Listen(服务端监听),配合net.Conn读写、超时控制与goroutine并发处理实现高效通信。

如何使用golang创建tcp连接_golang net dial与listen tcp使用方法

Go 语言通过 net 包提供了简洁、高效的 TCP 网络编程支持。核心是 net.Dial(发起连接)和 net.Listen(监听连接),两者配合即可完成客户端与服务端的通信。

使用 net.Dial 建立 TCP 客户端连接

net.Dial 是客户端主动连接远程服务器的标准方式,返回一个 net.Conn 接口,可用于读写数据。

基本用法:

conn, err := net.Dial("tcp", "127.0.0.1:8080", nil)
if err != nil {
    log.Fatal(err)
}
defer conn.Close()
<p>// 发送数据
conn.Write([]byte("Hello Server\n"))</p><p>// 接收响应
buf := make([]byte, 1024)
n, _ := conn.Read(buf)
fmt.Println("收到:", string(buf[:n]))
  • 第一个参数是网络类型,TCP 固定为 "tcp"(IPv4)或 "tcp4"/"tcp6"
  • 第二个参数是地址,格式为 "host:port",如 "google.com:80""192.168.1.100:3000"
  • 第三个参数可传 *net.Dialer 自定义超时、KeepAlive、本地地址等(常用于控制连接行为)

使用 net.Listen 启动 TCP 服务端

net.Listen 在指定地址上启动监听,返回 net.Listener,之后调用 Accept() 阻塞等待新连接。

简单服务端示例:

ln, err := net.Listen("tcp", ":8080")
if err != nil {
    log.Fatal(err)
}
defer ln.Close()
<p>fmt.Println("服务器运行在 :8080")</p><p>for {
conn, err := ln.Accept()
if err != nil {
log.Println("接受连接失败:", err)
continue
}</p><pre class="brush:php;toolbar:false;">// 每个连接开 goroutine 处理,避免阻塞后续连接
go handleConnection(conn)

}

handleConnection 示例:

达芬奇 达芬奇

达芬奇——你的AI创作大师

达芬奇 166 查看详情 达芬奇
func handleConnection(conn net.Conn) {
    defer conn.Close()
    buf := make([]byte, 1024)
    n, _ := conn.Read(buf)
    fmt.Printf("收到:%s", string(buf[:n]))
    conn.Write([]byte("OK\n"))
}
  • 监听地址用 ":8080" 表示监听本机所有 IPv4/IPv6 地址的 8080 端口
  • "127.0.0.1:8080" 则只监听本地回环,更安全
  • 务必用 go handleConnection(conn) 启协程处理每个连接,否则串行处理会卡死

常见实用技巧与注意事项

实际开发中,几个关键点容易忽略但影响稳定性:

  • 设置连接超时:用 &net.Dialer{Timeout: 5 * time.Second} 避免 Dial 卡死
  • 设置读写超时:调用 conn.SetReadDeadline()conn.SetWriteDeadline() 防止 I/O 挂起
  • 正确关闭连接:服务端需在处理完后 conn.Close(),客户端同理;多次关闭无害,但漏关会导致资源泄漏
  • 错误处理别忽略Read 返回 0, io.EOF 表示对端关闭,应退出循环而非报错

完整可运行的小例子(服务端 + 客户端)

把下面两段代码分别保存为 server.goclient.go,先运行服务端再运行客户端,就能看到通信效果。

服务端(server.go):

package main
<p>import (
"fmt"
"io"
"log"
"net"
)</p><p>func main() {
ln, _ := net.Listen("tcp", ":9000")
defer ln.Close()
fmt.Println("服务启动,监听 :9000")</p><pre class="brush:php;toolbar:false;">for {
    conn, err := ln.Accept()
    if err != nil {
        log.Println(err)
        continue
    }
    go func(c net.Conn) {
        defer c.Close()
        io.Copy(c, c) // 回显所有收到的数据
    }(conn)
}

}

客户端(client.go):

package main
<p>import (
"fmt"
"io"
"log"
"net"
)</p><p>func main() {
conn, err := net.Dial("tcp", "127.0.0.1:9000", nil)
if err != nil {
log.Fatal(err)
}
defer conn.Close()</p><pre class="brush:php;toolbar:false;">conn.Write([]byte("Hi there!\n"))
io.Copy(os.Stdout, conn) // 把响应输出到终端

}

注意:客户端示例中用了 os.Stdout,需补上 import "os"

基本上就这些。Golang 的 TCP 编程模型干净直接,DialListen 是入口,剩下的就是按需读写、超时控制和并发管理。不复杂但容易忽略细节,比如超时和 goroutine 泄漏,上线前务必检查。

以上就是如何使用Golang创建TCP连接_Golang net Dial与Listen TCP使用方法的详细内容,更多请关注其它相关文章!


# 几个  # 敦煌网seo招聘  # 搜狗关键词排名外包  # 最低价网站建设  # 信用卡社区营销推广方案  # 品牌网站建设运营  # 镇江专业seo服务  # 常州网站推广代运营企业  # 杭州手机网站建设公司  # 四川网站建设全攻略  # 沧州seo多少钱  # 如何在  # 就能  # 第一个  # go  # 布尔  # 如何使用  # 服务端  # 客户端  # 达芬奇  # 网络编程  # google  # ai  # 端口  # ipv6  # go语言  # golang 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 店铺如何做视频号推广?做视频号推广有用吗?  使用jQuery精确检测除指定元素外任意位置的点击事件  全球各国上班时间表外贸邮件时间  虫虫漫画绿色安全入口_虫虫漫画绿色安全入口安全看漫画  Python自动化抓取GBGB赛狗比赛结果:日期范围与赛道筛选教程  实时数据流中高效查找最小值与最大值  VBA Outlook邮件自动化:高效集成Excel数据与列标题的策略  抖音团长模式怎么做?团长模式是什么意思?  Win10如何查看已安装的更新补丁 Win10卸载指定更新教程【教程】  基于 Flink 和 Kafka 实现高效流处理:连续查询与时间窗口  利用Flexbox实现图片元素的二维布局:2x2网格排列指南  PHP与SQL实践:高效实现数据复制与特定列值修改  Python测试中模块导入路径解析的最佳实践  J*aScript二进制处理_ArrayBuffer与Blob  《全民k歌》音乐怎么下载到本地2025  《梦想世界:长风问剑录》药师一图流分享  《下一站江湖2》大雪山加入方法  《长生:天机降世》火塔小怪大全  firefox火狐浏览器最新官网主页_ firefox火狐浏览器平台入口直达官方链接  C++怎么解决数值计算中的精度问题_C++浮点数误差与数值稳定性分析  店铺如何关联视频号推广?视频号推广有什么用?  手机远程连接电脑方法  使用Google服务账号实现Google Drive API无缝集成与文件访问  百度网盘网页入口链接分享 百度网盘官网入口网页登录  房产|直播|视频号怎么认证开通?|直播|需要什么资质?  解决CSS布局中意外顶部空白问题的教程  漫蛙漫画官方网站使用_漫蛙manwa网页版在线入口教程  Pydantic 中“schema”字段命名冲突的解决方案  汽水音乐网页版登录 汽水音乐网页端官方入口  米侠浏览器插件无法启用怎么办 米侠浏览器扩展兼容性修复  DeepSeek超全面指南:入门必看  《下一站江湖2》风神腿获取攻略  使用VS Code作为你的个人知识管理系统  c++20的指定初始化(Designated Initializers)怎么用_c++ C风格结构体初始化  微信朋友圈怎么设置三天可见 微信朋友圈设置指定天数可见步骤【教程】  J*aScript模块加载器_RequireJS原理分析  win11资源管理器标签页怎么用 Win11文件管理器多标签高效操作【新功能】  学习通网页版个人登录_学习通网页版个人账户登录入口  SQLAlchemy 2.0 与 Pydantic 模型类型安全集成指南  为什么XML解析器对大小写敏感? 理解XML规范中的大小写规则与最佳实践  OpenWeatherMap API:通过城市名称获取天气预报数据指南  顺丰速运官网查询入口 顺丰物流查询官网入口链接  Python定时发送QQ消息  多多买菜门店端app订单查看方法  汽水音乐车机版官网5.0 汽水音乐车机版5.0版本下载入口  使用 .htaccess 正确配置 WordPress 子目录重定向与路径保留  宝妈做视频号该写什么标签话题?宝妈关注的话题有哪些?  《i莞家》修改昵称方法  如何取消数字签名  《画加》约稿流程 

 2025-12-15

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.