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

推荐订阅源

博客园 - 【当耐特】
N
Netflix TechBlog - Medium
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
雷峰网
雷峰网
MongoDB | Blog
MongoDB | Blog
有赞技术团队
有赞技术团队
Engineering at Meta
Engineering at Meta
M
MIT News - Artificial intelligence
Google DeepMind News
Google DeepMind News
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
T
Tailwind CSS Blog
小众软件
小众软件
J
Java Code Geeks
人人都是产品经理
人人都是产品经理
博客园_首页
MyScale Blog
MyScale Blog
博客园 - 聂微东
V
Visual Studio Blog
The Cloudflare Blog
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
U
Unit 42

博客园 - 悉野

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)
}