Go語言通過net包實現(xiàn)TCP通信,服務端使用net.Listen監(jiān)聽端口,Accept接收連接并用goroutine處理;客戶端通過net.Dial發(fā)起連接,利用net.Conn進行讀寫。示例展示回聲服務:服務端接收消息后回顯,客戶端發(fā)送輸入并打印響應。關(guān)鍵點包括并發(fā)處理、連接管理和數(shù)據(jù)流控制,體現(xiàn)Go在網(wǎng)絡編程中的簡潔與高效。
Go語言的網(wǎng)絡編程基礎主要依賴于標準庫中的 net 包,它封裝了底層的網(wǎng)絡通信細節(jié),提供了簡單而強大的接口來處理TCP、UDP、HTTP等協(xié)議。其中,TCP作為面向連接、可靠的傳輸層協(xié)議,是構(gòu)建穩(wěn)定網(wǎng)絡服務的常用選擇。
使用 net 包建立TCP連接,核心涉及兩個角色:服務端監(jiān)聽連接請求,客戶端發(fā)起連接。下面通過一個簡單的回聲(echo)示例展示如何使用 net 包實現(xiàn)基本的TCP通信。
服務端通過 net.Listen 監(jiān)聽指定地址和端口,等待客戶端連接。每當有新連接到來,使用 listener.Accept 接受連接并啟動一個 goroutine 處理數(shù)據(jù)讀寫,以實現(xiàn)并發(fā)處理多個客戶端。
示例代碼:
立即進入“豆包AI人工智官網(wǎng)入口”;
立即學習“豆包AI人工智能在線問答入口”;
package main import ( "bufio" "fmt" "net" ") func main() { // 監(jiān)聽本地 8080 端口 listener, err := net.Listen("tcp", "localhost:8080") if err != nil { fmt.Println("監(jiān)聽失敗:", err) return } defer listener.Close() fmt.Println("服務器啟動,監(jiān)聽端口 8080...") for { // 等待客戶端連接 conn, err := listener.Accept() if err != nil { fmt.Println("接受連接失敗:", err) continue } // 啟動協(xié)程處理該連接 go handleConnection(conn) } } // 處理客戶端連接 func handleConnection(conn net.Conn) { defer conn.Close() scanner := bufio.NewScanner(conn) for scanner.Scan() { msg := scanner.Text() fmt.Printf("收到消息: %s\n", msg) // 回顯給客戶端 conn.Write([]byte("echo: " + msg + "\n")) } }
客戶端使用 net.Dial 連接到服務端,獲取連接對象后即可發(fā)送和接收數(shù)據(jù)。通過標準輸入讀取用戶輸入,并將內(nèi)容發(fā)送給服務端,同時讀取服務端返回的數(shù)據(jù)。
示例代碼:
立即進入“豆包AI人工智官網(wǎng)入口”;
立即學習“豆包AI人工智能在線問答入口”;
package main import ( "bufio" "fmt" "net" "os" ") func main() { // 連接到服務端 conn, err := net.Dial("tcp", "localhost:8080") if err != nil { fmt.Println("連接失敗:", err) return } defer conn.Close() fmt.Println("已連接到服務器") // 開啟一個協(xié)程接收服務端消息 go func() { scanner := bufio.NewScanner(conn) for scanner.Scan() { fmt.Println("服務端:", scanner.Text()) } }() // 從標準輸入讀取用戶輸入并發(fā)送 input := bufio.NewScanner(os.Stdin) for input.Scan() { msg := input.Text() conn.Write([]byte(msg + "\n")) } }
先啟動服務端:
go run server.go
再打開另一個終端運行客戶端:
go run client.go
在客戶端輸入任意文本,服務端會打印并回顯,客戶端也會收到回顯內(nèi)容。
基本上就這些。Go 的 net 包設計簡潔,配合 goroutine 能輕松實現(xiàn)高性能網(wǎng)絡服務。理解 TCP 連接的建立與數(shù)據(jù)流處理是網(wǎng)絡編程的基礎。不復雜但容易忽略。
以上就是Golang網(wǎng)絡編程基礎是什么 使用net包建立TCP連接示例的詳細內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
編程怎么學習?編程怎么入門?編程在哪學?編程怎么學才快?不用擔心,這里為大家提供了編程速學教程(入門課程),有需要的小伙伴保存下載就能學習啦!
微信掃碼
關(guān)注PHP中文網(wǎng)服務號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號