在Golang中,可以使用標準庫"net"來實現網絡通信。以下是一個簡單的示例,展示了如何在Linux中使用Golang進行TCP網絡通信。
server.go的文件,用于編寫服務器端代碼:package main
import (
"bufio"
"fmt"
"net"
"os"
)
func main() {
// 監聽端口
listener, err := net.Listen("tcp", ":8080")
if err != nil {
fmt.Println("Error listening:", err.Error())
os.Exit(1)
}
defer listener.Close()
fmt.Println("Listening on :8080")
for {
// 接受客戶端連接
conn, err := listener.Accept()
if err != nil {
fmt.Println("Error accepting connection:", err.Error())
continue
}
// 處理客戶端連接
go handleConnection(conn)
}
}
func handleConnection(conn net.Conn) {
defer conn.Close()
// 讀取客戶端發送的數據
reader := bufio.NewReader(conn)
message, err := reader.ReadString('\n')
if err != nil {
fmt.Println("Error reading message:", err.Error())
return
}
fmt.Printf("Received message from client: %s", message)
// 向客戶端發送響應
_, err = conn.Write([]byte("Hello from server!\n"))
if err != nil {
fmt.Println("Error sending response:", err.Error())
return
}
}
client.go的文件,用于編寫客戶端代碼:package main
import (
"bufio"
"fmt"
"net"
"os"
)
func main() {
// 連接到服務器
conn, err := net.Dial("tcp", "localhost:8080")
if err != nil {
fmt.Println("Error connecting to server:", err.Error())
os.Exit(1)
}
defer conn.Close()
// 向服務器發送數據
fmt.Print("Enter message to send to server: ")
reader := bufio.NewReader(os.Stdin)
message, _ := reader.ReadString('\n')
_, err = conn.Write([]byte(message))
if err != nil {
fmt.Println("Error sending message:", err.Error())
return
}
// 讀取服務器響應
response, err := bufio.NewReader(conn).ReadString('\n')
if err != nil {
fmt.Println("Error reading response:", err.Error())
return
}
fmt.Printf("Received response from server: %s", response)
}
在終端中,進入到包含server.go和client.go的目錄,然后運行以下命令:
# 編譯并運行服務器端代碼
go run server.go
# 在另一個終端中編譯并運行客戶端代碼
go run client.go
注意:這個示例僅用于演示目的,實際應用中可能需要考慮更多的錯誤處理和功能。此外,還可以使用UDP、HTTP等其他協議進行網絡通信。