Go 网络编程概述
Go语言以其简洁、高效和并发友好的特性,成为网络编程的理想选择。Go的标准库提供了丰富的网络编程工具,使得开发者能够轻松构建高性能的网络应用。本文将带你了解Go网络编程的基础知识,并通过代码示例和实际案例帮助你快速上手。
什么是网络编程?
网络编程是指通过计算机网络实现程序之间的通信。常见的网络通信协议包括TCP、UDP、HTTP等。Go语言通过标准库中的net
包提供了对这些协议的支持,使得开发者能够轻松实现网络通信。
Go 网络编程的核心概念
1. TCP通信
TCP(传输控制协议)是一种面向连接的、可靠的通信协议。Go语言通过net
包提供了对TCP的支持。以下是一个简单的TCP服务器和客户端的实现示例。
TCP服务器
package main
import (
"bufio"
"fmt"
"net"
)
func main() {
// 监听端口
listener, err := net.Listen("tcp", ":8080")
if err != nil {
fmt.Println("Error listening:", err.Error())
return
}
defer listener.Close()
fmt.Println("Listening on :8080...")
for {
// 接受连接
conn, err := listener.Accept()
if err != nil {
fmt.Println("Error accepting:", err.Error())
return
}
// 处理连接
go handleConnection(conn)
}
}
func handleConnection(conn net.Conn) {
defer conn.Close()
// 读取数据
message, err := bufio.NewReader(conn).ReadString('\n')
if err != nil {
fmt.Println("Error reading:", err.Error())
return
}
fmt.Print("Message received:", string(message))
// 发送响应
conn.Write([]byte("Message received.\n"))
}
TCP客户端
package main
import (
"bufio"
"fmt"
"net"
)
func main() {
// 连接到服务器
conn, err := net.Dial("tcp", "localhost:8080")
if err != nil {
fmt.Println("Error connecting:", err.Error())
return
}
defer conn.Close()
// 发送消息
fmt.Fprintf(conn, "Hello, server!\n")
// 读取响应
message, err := bufio.NewReader(conn).ReadString('\n')
if err != nil {
fmt.Println("Error reading:", err.Error())
return
}
fmt.Print("Message from server:", message)
}
备注
在上述示例中,服务器监听8080
端口,客户端连接到该端口并发送消息。服务器接收到消息后,返回一个响应。