实例目标:
实现一个简单的TCP服务器和客户端,展示Go语言在网络编程中的应用。
代码示例:
TCP服务器:
package main
import (
"fmt"
"net"
"os"
)
func handleConnection(conn net.Conn) {
fmt.Println("Client connected:", conn.RemoteAddr())
buffer := make([]byte, 1024)
for {
n, err := conn.Read(buffer)
if err != nil {
fmt.Println("Connection error:", err)
break
}
fmt.Println("Received:", string(buffer[:n]))
conn.Write([]byte("Message received"))
}
conn.Close()
}
func main() {
ln, err := net.Listen("tcp", ":8080")
if err != nil {
fmt.Println("Error starting server:", err)
os.Exit(1)
}
defer ln.Close()
fmt.Println("Server listening on port 8080")
for {
conn, err := ln.Accept()
if err != nil {
fmt.Println("Error accepting connection:", err)
continue
}
go handleConnection(conn)
}
}
TCP客户端:
package main
import (
"fmt"
"net"
"os"
)
func main() {
conn, err := net.Dial("tcp", "localhost:8080")
if err != nil {
fmt.Println("Error connecting to server:", err)
os.Exit(1)
}
defer conn.Close()
fmt.Println("Connected to server")
message := "Hello, Server!"
conn.Write([]byte(message))
buffer := make([]byte, 1024)
n, err := conn.Read(buffer)
if err != nil {
fmt.Println("Error reading from server:", err)
os.Exit(1)
}
fmt.Println("Server response:", string(buffer[:n]))
}
解释:
- TCP服务器:
- 使用
net.Listen("tcp", ":8080")
在本地8080端口创建一个TCP服务器。 Accept()
方法阻塞并等待客户端连接。一旦连接成功,通过go handleConnection(conn)
启动一个新的goroutine来处理每个连接。
- TCP客户端:
- 客户端通过
net.Dial("tcp", "localhost:8080")
连接到服务器。 - 连接建立后,客户端向服务器发送消息,并等待服务器的响应。
- 多并发连接: 服务器使用goroutines来并发处理多个客户端连接,这允许服务器高效地处理多个客户端请求。
应用场景:
TCP编程常用于构建低延迟、高吞吐量的网络应用,如聊天应用、游戏服务器、实时数据传输等。