Go 语言中的网络协议有哪些
更新时间:2023-11-12Go 语言中的网络协议
TCP协议
TCP 是一种基于连接的、可靠的协议,它可以确保数据传输的正确性和可靠性。在 Go 语言中,可以使用 net 包来创建和处理 TCP 连接。
// 创建 TCP 服务器 package main import ( "fmt" "net" ) func main() { listener, err :=net.Listen("tcp", ":8888") if err !=nil { fmt.Println("error:", err) return } defer listener.Close() fmt.Println("server start") for { conn, err :=listener.Accept() if err !=nil { fmt.Println("error:", err) return } go handleConnection(conn) } } func handleConnection(conn net.Conn) { defer conn.Close() buf :=make([]byte, 1024) for { n, err :=conn.Read(buf) if err !=nil { fmt.Println("error:", err) return } fmt.Println("receive:", string(buf[:n])) } }
UDP协议
UDP 是一种无连接的、不可靠的协议,它不能确保数据传输的正确性和可靠性,但是具有较低的延迟和较小的网络开销。在 Go 语言中,可以使用 net 包来创建和处理 UDP 连接。
// 创建 UDP 服务器 package main import ( "fmt" "net" ) func main() { addr, err :=net.ResolveUDPAddr("udp", ":8888") if err !=nil { fmt.Println("error:", err) return } conn, err :=net.ListenUDP("udp", addr) if err !=nil { fmt.Println("error:", err) return } defer conn.Close() fmt.Println("server start") buf :=make([]byte, 1024) for { n, addr, err :=conn.ReadFromUDP(buf) if err !=nil { fmt.Println("error:", err) return } fmt.Println("receive:", string(buf[:n])) conn.WriteToUDP([]byte("server receive"), addr) } }
HTTP协议
HTTP 是一种基于请求响应的协议,它由客户端发起请求,服务器端响应请求。在 Go 语言中,可以使用 net/http 包来创建和处理 HTTP 服务器。
// 创建 HTTP 服务器 package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "hello world") }) http.ListenAndServe(":8888", nil) }
WebSocket协议
WebSocket 是一种基于 TCP 协议的协议,它提供了全双工的通信能力,可以实现在客户端和服务器之间进行实时的双向通信。在 Go 语言中,可以使用 gorilla/websocket 包来创建和处理 WebSocket 服务器。
// 创建 WebSocket 服务器 package main import ( "fmt" "net/http" "github.com/gorilla/websocket" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { upgrader :=websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true }, } conn, err :=upgrader.Upgrade(w, r, nil) if err !=nil { fmt.Println("error:", err) return } defer conn.Close() for { messageType, message, err :=conn.ReadMessage() if err !=nil { fmt.Println("error:", err) return } fmt.Println("receive:", string(message)) conn.WriteMessage(messageType, []byte("server receive")) } }) http.ListenAndServe(":8888", nil) }
总结
Go 语言提供了丰富的网络编程功能,可以轻松地构建各种类型的网络应用程序。TCP 协议可以确保数据传输的正确性和可靠性,UDP 协议提供了较低的延迟和较小的网络开销,HTTP 协议可以基于请求响应实现客户端和服务器之间的通信,WebSocket 协议提供了全双工的通信能力。