golang,go,博客,开源,编程
net
包是 Go 语言标准库中的一个核心网络编程包,提供了 TCP、UDP、IP、Unix 域套接字等通信方式的封装。它主要用于网络连接、服务器和客户端的开发。
net
包的主要功能net.Listen(network, address)
: 创建监听器,等待客户端连接(如 tcp
、udp
)。net.Dial(network, address)
: 创建到远程服务器的连接。net.LookupIP(domain)
: 解析域名获取 IP 地址。net.ResolveTCPAddr(network, address)
: 解析 TCP 地址。net.Listen
+ Accept
实现 TCP 服务器。net.ListenPacket
处理 UDP 服务器。net.Dial("tcp", "localhost:8080")
创建 TCP 连接。net.DialUDP("udp", nil, udpAddr)
进行 UDP 连接。package main
import (
"fmt"
"net"
)
func main() {
// 监听端口
listener, err := net.Listen("tcp", ":8080")
if err != nil {
panic(err)
}
defer listener.Close()
fmt.Println("TCP Server listening on port 8080...")
for {
// 等待客户端连接
conn, err := listener.Accept()
if err != nil {
fmt.Println("Connection error:", err)
continue
}
// 处理连接
go handleConnection(conn)
}
}
func handleConnection(conn net.Conn) {
defer conn.Close()
buffer := make([]byte, 1024)
n, err := conn.Read(buffer)
if err != nil {
fmt.Println("Read error:", err)
return
}
fmt.Println("Received:", string(buffer[:n]))
conn.Write([]byte("Hello from server!"))
}
package main
import (
"fmt"
"net"
)
func main() {
// 连接服务器
conn, err := net.Dial("tcp", "localhost:8080")
if err != nil {
panic(err)
}
defer conn.Close()
// 发送数据
message := "Hello, Server!"
conn.Write([]byte(message))
// 接收数据
buffer := make([]byte, 1024)
n, _ := conn.Read(buffer)
fmt.Println("Received from server:", string(buffer[:n]))
}
package main
import (
"fmt"
"net"
)
func main() {
addr, _ := net.ResolveUDPAddr("udp", ":8081")
conn, _ := net.ListenUDP("udp", addr)
defer conn.Close()
fmt.Println("UDP Server listening on port 8081...")
buffer := make([]byte, 1024)
for {
n, clientAddr, _ := conn.ReadFromUDP(buffer)
fmt.Println("Received:", string(buffer[:n]), "from", clientAddr)
conn.WriteToUDP([]byte("Hello from UDP server!"), clientAddr)
}
}
package main
import (
"fmt"
"net"
)
func main() {
serverAddr, _ := net.ResolveUDPAddr("udp", "localhost:8081")
conn, _ := net.DialUDP("udp", nil, serverAddr)
defer conn.Close()
// 发送数据
message := "Hello, UDP Server!"
conn.Write([]byte(message))
// 接收数据
buffer := make([]byte, 1024)
n, _, _ := conn.ReadFromUDP(buffer)
fmt.Println("Received from server:", string(buffer[:n]))
}
net/http
相关如果你要处理 HTTP 服务器和客户端,推荐使用 net/http
包,例如:
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, HTTP!")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
net
相关函数addr, err := net.ResolveTCPAddr("tcp", "127.0.0.1:8080")
fmt.Println(addr)
addrs, _ := net.InterfaceAddrs()
for _, addr := range addrs {
fmt.Println(addr.String())
}
net.Listen
创建服务器,net.Dial
创建客户端。net.ListenPacket
监听,net.DialUDP
发送数据。net.LookupIP
查询 IP 地址。net/http
。net
包是 Go 网络编程的基础,理解它可以让你快速构建高效的网络应用! 🚀