【go笔记】TCP编程
2022/1/1 17:09:35
本文主要是介绍【go笔记】TCP编程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
- TCP服务端的处理流程
- 监听端口
- 接收客户端请求建立连接
- 创建goroutine处理链接
示例代码:TCP服务端
package main import ( "net" "bufio" "fmt" ) // 处理函数 func process(conn net.Conn) { // 最终关闭连接 defer conn.Close() for { reader := bufio.NewReader(conn) var buf [128]byte // 读取数据 n,err := reader.Read(buf[:]) if err != nil { fmt.Println("Read from client failed, error: ",err) break } recvStr := string(buf[:n]) fmt.Println("收到client端发来的数据: ",recvStr) // 发送数据 conn.Write([]byte(recvStr)) } } func main() { listen, err := net.Listen("tcp", "0.0.0.0:8000") if err != nil { fmt.Println("Listen Port 0.0.0.0:8000 failed, error: ",err) return } for { conn, err := listen.Accept() if err != nil { fmt.Println("Accept failed, error: ",err) continue } go process(conn) } }
示例代码:TCP客户端
package main import ( "fmt" "net" "bufio" "os" "strings" ) func main() { conn, err := net.Dial("tcp", "127.0.0.1:8000") if err != nil { fmt.Println("connect to 127.0.0.1:8000 error, error: ",err) return } // 关闭连接 defer conn.Close() inputReader := bufio.NewReader(os.Stdin) for { // 读取输入 input,_ := inputReader.ReadString('\n') inputInfo := strings.Trim(input, "\r\n") // 输入q推出 if strings.ToUpper(inputInfo) == "Q" { return } // 发送数据 _,err = conn.Write([]byte(inputInfo)) if err != nil { fmt.Println(err) return } buf := [512]byte{} n, err := conn.Read(buf[:]) if err != nil { fmt.Println("recv failed, error: ",err) return } fmt.Println(string(buf[:n])) } }
参考文档
- Go语言中文文档之TCP编程
这篇关于【go笔记】TCP编程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15SendGrid 的 Go 客户端库怎么实现同时向多个邮箱发送邮件?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么设置header 和 标签tag 呢?-icode9专业技术文章分享
- 2024-11-12Cargo deny安装指路
- 2024-11-02MongoDB项目实战:从入门到初级应用
- 2024-11-01随时随地一键转录,Google Cloud 新模型 Chirp 2 让语音识别更上一层楼
- 2024-10-25Google Cloud动手实验详解:如何在Cloud Run上开发无服务器应用
- 2024-10-24AI ?先驱齐聚 BAAI 2024,发布大规模语言、多模态、具身、生物计算以及 FlagOpen 2.0 等 AI 模型创新成果。
- 2024-10-20goland工具下,如修改一个项目的标准库SDK的版本-icode9专业技术文章分享
- 2024-10-17Go学习:初学者的简单教程
- 2024-10-17Go学习:新手入门完全指南