golang套接字的實現
更新時間:2024年10月30日 09:41:17 作者:get200
Go語言中通過標準庫net實現套接字編程,涵蓋了TCP和UDP兩種網絡類型,通過這些基本概念和實際代碼示例,可以幫助理解和掌握Go語言中的套接字編程
在 Go 語言中,使用標準庫 net
來實現套接字編程。以下是有關 Go 套接字的基本概念和示例。
1. 基本概念
- 網絡類型:
- TCP:流套接字,提供可靠的、面向連接的通信。
- UDP:數據報套接字,無連接,適用于快速傳輸。
2. TCP 套接字示例
服務器端代碼
package main import ( "fmt" "net" ) func main() { // 創(chuàng)建 TCP 套接字 listener, err := net.Listen("tcp", ":12345") if err != nil { fmt.Println("Error starting server:", err) return } defer listener.Close() fmt.Println("Waiting for a connection...") for { // 接受連接 conn, err := listener.Accept() if err != nil { fmt.Println("Error accepting connection:", err) continue } fmt.Println("Connection established from", conn.RemoteAddr()) // 處理連接 go handleConnection(conn) } } func handleConnection(conn net.Conn) { defer conn.Close() message := "Hello, Client!" conn.Write([]byte(message)) fmt.Println("Message sent to client:", message) }
客戶端代碼
package main import ( "fmt" "net" ) func main() { // 連接到服務器 conn, err := net.Dial("tcp", "localhost:12345") if err != nil { fmt.Println("Error connecting to server:", err) return } defer conn.Close() // 接收數據 buffer := make([]byte, 1024) n, err := conn.Read(buffer) if err != nil { fmt.Println("Error reading from server:", err) return } fmt.Println("Received message from server:", string(buffer[:n])) }
3. UDP 套接字示例
服務器端代碼
package main import ( "fmt" "net" ) func main() { // 創(chuàng)建 UDP 套接字 address, err := net.ResolveUDPAddr("udp", ":12345") if err != nil { fmt.Println("Error resolving address:", err) return } conn, err := net.ListenUDP("udp", address) if err != nil { fmt.Println("Error listening:", err) return } defer conn.Close() fmt.Println("Waiting for a connection...") for { buffer := make([]byte, 1024) n, addr, err := conn.ReadFromUDP(buffer) if err != nil { fmt.Println("Error reading from UDP:", err) continue } fmt.Println("Received message from", addr, ":", string(buffer[:n])) // 發(fā)送響應 response := []byte("Hello, UDP Client!") conn.WriteToUDP(response, addr) } }
客戶端代碼
package main import ( "fmt" "net" ) func main() { // 發(fā)送 UDP 數據包 address, err := net.ResolveUDPAddr("udp", "localhost:12345") if err != nil { fmt.Println("Error resolving address:", err) return } conn, err := net.DialUDP("udp", nil, address) if err != nil { fmt.Println("Error connecting:", err) return } defer conn.Close() message := []byte("Hello, Server!") conn.Write(message) // 接收響應 buffer := make([]byte, 1024) n, _, err := conn.ReadFromUDP(buffer) if err != nil { fmt.Println("Error reading from server:", err) return } fmt.Println("Received message from server:", string(buffer[:n])) }
4. 運行示例
- 首先在一個終端中運行服務器代碼。
- 然后在另一個終端中運行客戶端代碼。
總結
Go 語言的 net
包使得套接字編程變得簡單而高效。通過使用 TCP 或 UDP 套接字,你可以輕松實現網絡通信。
到此這篇關于golang套接字的實現的文章就介紹到這了,更多相關golang套接字內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:
相關文章
Golang利用channel協(xié)調協(xié)程的方法詳解
go?當中的并發(fā)編程是通過goroutine來實現的,利用channel(管道)可以在協(xié)程之間傳遞數據,所以本文就來講講Golang如何利用channel協(xié)調協(xié)程吧2023-05-05Kubernetes上使用Jaeger分布式追蹤基礎設施詳解
這篇文章主要為大家介紹了Kubernetes上使用Jaeger分布式追蹤基礎設施詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03