发布时间:2024-12-22 21:23:21
在golang中,创建一个TCP服务器非常简单。以下是一个简单的TCP服务器的代码示例:
```go package main import ( "fmt" "net" ) func handleClient(conn net.Conn) { defer conn.Close() buf := make([]byte, 1024) for { // 从客户端接收数据 n, err := conn.Read(buf) if err != nil { fmt.Println("Error reading:", err.Error()) return } // 打印收到的数据 fmt.Println("Received data:", string(buf[:n])) // 向客户端发送响应 _, err = conn.Write([]byte("Message received.")) if err != nil { fmt.Println("Error writing:", err.Error()) return } } } func main() { // 监听端口 ln, err := net.Listen("tcp", ":8080") if err != nil { fmt.Println("Error listening:", err.Error()) return } fmt.Println("Server listening on port 8080...") // 处理客户端连接 for { conn, err := ln.Accept() if err != nil { fmt.Println("Error accepting connection:", err.Error()) continue } // 在不同的Goroutine中处理每个连接 go handleClient(conn) } } ``` 这段代码创建一个TCP服务器,并监听8080端口。当客户端连接到该端口时,服务器会接受连接并在一个单独的Goroutine中处理该连接。处理函数`handleClient`负责接收客户端发送的消息并向客户端发送响应。编写一个TCP客户端也非常简单。以下是一个简单的TCP客户端代码示例:
```go package main import ( "fmt" "net" ) func main() { // 连接服务器 conn, err := net.Dial("tcp", "localhost:8080") if err != nil { fmt.Println("Error connecting:", err.Error()) return } defer conn.Close() // 发送消息给服务器 _, err = conn.Write([]byte("Hello, server!")) if err != nil { fmt.Println("Error writing:", err.Error()) return } // 接收服务器的响应 buf := make([]byte, 1024) n, err := conn.Read(buf) if err != nil { fmt.Println("Error reading:", err.Error()) return } // 打印服务器的响应 fmt.Println("Received response:", string(buf[:n])) } ``` 这段代码创建一个TCP客户端,并尝试连接到指定的服务器地址和端口。如果连接成功,客户端会向服务器发送一条消息,并等待服务器的响应。一旦收到响应,客户端会打印出来。本文介绍了如何使用golang的net包来编写基于TCP协议的服务器和客户端程序。通过使用net包提供的函数和方法,我们可以轻松地创建TCP连接、发送和接收数据。
当然,这只是一个简单的示例,实际项目中可能还会有更多的功能需求。不过通过本文的介绍,你应该能够理解如何使用golang的net包来开始编写自己的网络程序。