惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
月光博客
月光博客
aimingoo的专栏
aimingoo的专栏
Google DeepMind News
Google DeepMind News
Recent Announcements
Recent Announcements
MyScale Blog
MyScale Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
F
Fortinet All Blogs
小众软件
小众软件
D
Docker
U
Unit 42
博客园 - 聂微东
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
云风的 BLOG
云风的 BLOG
博客园 - 司徒正美
有赞技术团队
有赞技术团队
腾讯CDC

博客园 - 悉野

go编译期接口断言 / 编译期接口检查(compile-time interface assertion / compile-time interface check) Go 的类型断言 ssh连结vmware中ubuntu的共享文件夹 spring加载冲突问题 spring一个错误修正 抓安卓日记到文件 注册表删除桌面顽固图标 github买的账号无法拉取代码的解决方法 apk常用命令 java服务器异常处理 ES6 学习难度分层 promise原理 材质, 纹理, shader之间的关系 TCP与UDP区别 javascript中=>与function的区别 javascript中函数解析过程 cocos使用fgui 几种服务注册与发现的区别 mybatis测试 向量点乘与叉乘 unity画布3种渲染模式 go学习笔记10(HTTP) go学习笔记8(反射) c++简单的线程池 operator new 是 C++ 动态内存分配的核心函数,负责分配原始内存,不调用构造函数 C++的定位放置new(Placement new) go学习笔记7(泛型,文件读写,测试) go学习笔记6(协程与channel,select使用,线程安全,异常处理) go学习笔记5(函数,结构体,自定义类型和类别名,接口) go学习笔记4(数组与切片,map,if,switch,for循环)
go学习笔记9(TCP)
悉野 · 2026-04-16 · via 博客园 - 悉野

tcp服务端:

package main

import (
    "fmt"
    "net"
    "time"
)

func main() {
    listen, err := net.Listen("tcp", ":8081")
    if err != nil {
        return
    }
    fmt.Println("listen ok at port 8081")
    for {
        conn, err := listen.Accept()
        if err != nil {
            fmt.Println("accept err:", err)
            continue
        }
        // 使用goroutine处理每个连结, 避免堵塞
        go func(c net.Conn) {
            defer c.Close()
            conn.Write([]byte("hello world"))
            time.Sleep(2 * time.Second)
        }(conn)
    }
}

tcp客户端.go

package main

import (
    "fmt"
    "net"
    "time"
)

func main() {
    con, err := net.Dial("tcp", "127.0.0.1:8081")
    if err != nil {
        return
    }
    defer func(con net.Conn) {
        err := con.Close()
        if err != nil {
            return
        }
    }(con)
    buff := make([]byte, 1024)
    n, err := con.Read(buff)
    if err != nil {
        return
    }
    fmt.Println(string(buff[:n]))
    time.Sleep(3 * time.Second)
}