c语言编程笔录

首页 >   > 笔记大全

笔记大全

Go 语言中的网络协议有哪些

更新时间:2023-11-12

Go 语言中的网络协议

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 协议提供了全双工的通信能力。