Golang使用net包创建TCP服务器实践

答案:使用golang的net包可快速构建TCP服务器。通过net.Listen监听端口,Accept接收连接,并用goroutine处理每个连接,实现并发通信。示例中服务器读取客户端数据并回显,展示了基础的Read和Write操作,适合初学者入门。

Golang使用net包创建TCP服务器实践

用Golang的net包创建TCP服务器非常直接,标准库提供了足够的能力来处理常见的网络通信场景。下面是一个从零开始构建简单TCP服务器的实践指南,适合初学者理解和上手。

监听端口并接受连接

使用net.Listen函数可以启动一个TCP服务,监听指定地址和端口。通常使用"tcp"作为网络类型,比如监听本地的8080端口:

 listener, err := net.Listen("tcp", ":8080") if err != nil {     log.Fatal("监听失败:", err) } defer listener.Close() log.Println("服务器启动,监听 :8080...") 

调用Accept()方法会阻塞等待客户端连接。每当有新连接建立,都会返回一个net.Conn对象,代表与客户端的通信通道。

处理客户端连接

每接受一个连接,建议启动一个独立的goroutine去处理,这样不会阻塞后续连接的接入:

立即学习go语言免费学习笔记(深入)”;

 for {     conn, err := listener.Accept()     if err != nil {         log.Println("接受连接出错:", err)         continue     }     go handleConnection(conn) } 

其中handleConnection是自定义函数,负责读取客户端数据、响应请求等操作:

Golang使用net包创建TCP服务器实践

AppMall应用商店

AI应用商店,提供即时交付、按需付费的人工智能应用服务

Golang使用net包创建TCP服务器实践56

查看详情 Golang使用net包创建TCP服务器实践

 func handleConnection(conn net.Conn) {     defer conn.Close()     buffer := make([]byte, 1024)      for {         n, err := conn.Read(buffer)         if err != nil {             log.Println("读取数据出错:", err)             return         }          received := string(buffer[:n])         log.Printf("收到: %s", received)          // 回显数据给客户端         _, _ = conn.Write([]byte("echo: " + received))     } } 

这个例子实现了简单的“回显”功能,服务器把收到的内容原样返回。通过conn.Read读取数据,conn.Write发送响应。

完整示例:简易回显服务器

整合以上逻辑,一个完整的TCP服务器代码如下:

 package main  import (     "log"     "net" )  func main() {     listener, err := net.Listen("tcp", ":8080")     if err != nil {         log.Fatal("监听失败:", err)     }     defer listener.Close()     log.Println("服务器启动,监听 :8080...")      for {         conn, err := listener.Accept()         if err != nil {             log.Println("接受连接出错:", err)             continue         }         go handleConnection(conn)     } }  func handleConnection(conn net.Conn) {     defer conn.Close()     buffer := make([]byte, 1024)      for {         n, err := conn.Read(buffer)         if err != nil {             return         }          received := string(buffer[:n])         log.Printf("来自 %s: %s", conn.RemoteAddr(), received)         _, _ = conn.Write([]byte("echo: " + received))     } } 

运行程序后,可以用telnet localhost 8080nc测试连接,输入任意内容查看回显效果。

基本上就这些。Golang的net包简洁高效,配合goroutine能轻松实现并发TCP服务。不复杂但容易忽略的是错误处理和资源释放,实际项目中还需加入超时控制、协议解析等逻辑。

go golang 端口 ai 标准库 golang 并发 对象

上一篇
下一篇