在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
- 在客户端输入消息并发送,服务器将接收消息并发送响应。这样就实现了一个简单的TCP网络通信。
注意:这个示例仅用于演示目的,实际应用中可能需要考虑更多的错误处理和功能。此外,还可以使用UDP、HTTP等其他协议进行网络通信。