发布于2026-07-03 阅读(0)
扫一扫,手机访问
说到Linux下的Golang网络编程,标准库net可以说是一把趁手的利器。它覆盖了TCP、UDP、ICMP乃至Unix域套接字等常见协议,基本上日常需求都能搞定。下面用一个典型的TCP服务端+客户端示例,带你快速上手。

package main
import (
"bufio"
"fmt"
"net"
"os"
)
func main() {
port := "8080"
listener, err := net.Listen("tcp", ":"+port)
if err != nil {
fmt.Println("Error listening:", err.Error())
os.Exit(1)
}
defer listener.Close()
fmt.Println("Listening on " + port)
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println("Error accepting: ", err.Error())
continue
}
go handleRequest(conn)
}
}
func handleRequest(conn net.Conn) {
defer conn.Close()
reader := bufio.NewReader(conn)
for {
message, err := reader.ReadString('\n')
if err != nil {
fmt.Println("Error reading:", err.Error())
return
}
fmt.Print("Received message: ", string(message))
conn.Write([]byte("Message received\n"))
}
}
这段代码监听8080端口,每来一个连接就开一个goroutine去处理,子协程里不停地读消息并回复确认。典型的并发模型,简洁又高效。
package main
import (
"bufio"
"fmt"
"net"
"os"
"strings"
)
func main() {
server := "127.0.0.1"
port := "8080"
conn, err := net.Dial("tcp", server+":"+port)
if err != nil {
fmt.Println("Error connecting:", err.Error())
os.Exit(1)
}
defer conn.Close()
go func() {
reader := bufio.NewReader(conn)
for {
message, err := reader.ReadString('\n')
if err != nil {
fmt.Println("Error reading:", err.Error())
return
}
fmt.Print("Received message: ", string(message))
}
}()
reader := bufio.NewReader(os.Stdin)
for {
fmt.Print("Enter message: ")
text, _ := reader.ReadString('\n')
conn.Write([]byte(text))
if strings.ToLower(text) == "exit" {
break
}
}
}
客户端这边,先连上服务端,然后开一个后台goroutine持续接收服务端回显的消息,主协程则从标准输入读用户输入,发出去。输入“exit”退出。
先启动服务器程序,再启动客户端。在客户端输入任意消息,服务器会接收到并回复“Message received”,客户端则打印出这个回复。整个过程很直观,一个最小可用的TCP回显服务就完成了。
当然,这只是个入门示例。net库还藏着不少好东西:处理HTTP请求、解析DNS、构建UDP广播……更多玩法可以直接翻官方文档:https://pkg.go.dev/net。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8