使用net.Listen可快速创建TCP或Unix域套接字服务器,通过listener.Accept()接收连接并用goroutine并发处理,实现如回显服务。

在Go语言中,使用net.Listen启动一个服务器非常直接。它属于标准库net包,可用于监听TCP、Unix域套接字等网络连接。最常见的是通过TCP协议创建一个基础的网络服务。
1. 使用 net.Listen 监听 TCP 端口
net.Listen函数用于在指定的网络类型和地址上创建监听器。对于TCP服务,通常使用"tcp"作为网络类型,并绑定到某个IP和端口(如":8080"表示本机所有IP的8080端口)。
基本语法:
listener, err := net.Listen("tcp", ":8080")
如果监听成功,会返回一个net.Listener接口,之后可以通过它接受客户端连接。
立即学习“go语言免费学习笔记(深入)”;
示例代码:
package mainimport ( "io" "log" "net")func main() { // 监听本地8080端口 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() io.Copy(conn, conn) // 回显客户端发送的内容}
这个例子实现了一个简单的“回显服务器”,客户端发送什么,服务器就原样返回。
2. 常见网络类型和地址格式
net.Listen支持多种网络类型:
tcp:TCP IPv4/IPv6 网络 tcp4:仅 IPv4 tcp6:仅 IPv6 unix:Unix域套接字(Linux/macOS) unixpacket:面向数据包的Unix域套接字
地址格式依类型而定:
TCP: ":8080"、"127.0.0.1:8080"、"[::1]:8080"(IPv6) Unix: "/tmp/mysocket.sock"
例如使用Unix域套接字:
listener, err := net.Listen("unix", "/tmp/goserver.sock")if err != nil { log.Fatal(err)}defer listener.Close()// 后续 Accept 用法相同
3. 连接处理与并发
listener.Accept()是阻塞调用,每次返回一个net.Conn连接对象。为了同时处理多个客户端,通常使用goroutine。
上面例子中:
go handleConnection(conn)
为每个连接启动一个独立协程,实现并发处理。
注意:
确保在协程中关闭连接(defer conn.Close()) 避免在高并发下资源耗尽,必要时可加入连接数限制
4. 错误处理与优雅关闭
实际项目中应更细致地处理错误,比如端口被占用、权限不足等。
可以结合context实现服务器优雅关闭:
ctx, cancel := context.WithCancel(context.Background())// 在另一个goroutine中监听关闭信号go func() { sigCh := make(chan os.Signal, 1) signal.Notify(sigCh, os.Interrupt) <-sigCh log.Println("正在关闭服务器...") cancel() listener.Close() // 触发 Accept 返回错误}()
基本上就这些。net.Listen 提供了底层网络能力,适合构建自定义协议服务或学习网络编程。对于HTTP服务,建议使用net/http包,但其底层也是基于net.Listen实现的。
以上就是Golang如何使用net.Listen启动服务器的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1421101.html
微信扫一扫
支付宝扫一扫