Go 语言 网络编程 TCP/UDP 基础

Go阿木 发布于 2025-06-22 6 次阅读


Go 语言网络编程:TCP/UDP 基础教程

Go 语言,也被称为 Golang,是由 Google 开发的一种静态类型、编译型、并发型编程语言。由于其简洁的语法、高效的性能和强大的并发处理能力,Go 语言在近年来受到了广泛的关注和喜爱。在网络编程领域,Go 语言同样表现出色,提供了丰富的库和工具来支持 TCP 和 UDP 协议的开发。本文将围绕 Go 语言网络编程中的 TCP 和 UDP 基础进行详细介绍。

TCP 编程

1. TCP 协议简介

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它提供了数据传输的可靠性和顺序性,适用于需要稳定传输的应用场景,如 Web 浏览、文件传输等。

2. TCP 客户端与服务器

在 Go 语言中,使用 `net` 包可以轻松实现 TCP 客户端和服务器。

2.1 TCP 服务器

以下是一个简单的 TCP 服务器示例:

go

package main

import (


"fmt"


"net"


"os"


)

func main() {


// 监听本地端口 8080


l, err := net.Listen("tcp", ":8080")


if err != nil {


fmt.Println("Error listening:", err.Error())


os.Exit(1)


}


defer l.Close()


fmt.Println("Listening on 8080...")

for {


// 接受连接


conn, err := l.Accept()


if err != nil {


fmt.Println("Error accepting: ", err.Error())


os.Exit(1)


}


// 处理连接


go handleRequest(conn)


}


}

func handleRequest(conn net.Conn) {


defer conn.Close()


// 读取客户端发送的数据


buffer := make([]byte, 1024)


for {


n, err := conn.Read(buffer)


if err != nil {


fmt.Println("Error reading:", err.Error())


return


}


// 处理数据


fmt.Println("Received:", string(buffer[:n]))


}


}


2.2 TCP 客户端

以下是一个简单的 TCP 客户端示例:

go

package main

import (


"bufio"


"fmt"


"net"


"os"


)

func main() {


// 连接到服务器


conn, err := net.Dial("tcp", "localhost:8080")


if err != nil {


fmt.Println("Error connecting:", err.Error())


os.Exit(1)


}


defer conn.Close()

// 发送数据


reader := bufio.NewReader(os.Stdin)


for {


fmt.Print("Enter message: ")


message, _ := reader.ReadString('')


conn.Write([]byte(message))


}


}


UDP 编程

1. UDP 协议简介

UDP(用户数据报协议)是一种无连接的、不可靠的、基于数据报的传输层通信协议。它适用于对实时性要求较高的应用场景,如视频会议、在线游戏等。

2. UDP 客户端与服务器

在 Go 语言中,使用 `net` 包同样可以轻松实现 UDP 客户端和服务器。

2.1 UDP 服务器

以下是一个简单的 UDP 服务器示例:

go

package main

import (


"fmt"


"net"


)

func main() {


// 监听本地端口 8080


udpAddr, err := net.ResolveUDPAddr("udp", ":8080")


if err != nil {


fmt.Println("Error resolving UDP address:", err.Error())


os.Exit(1)


}

// 创建 UDP 连接


conn, err := net.ListenUDP("udp", udpAddr)


if err != nil {


fmt.Println("Error listening UDP:", err.Error())


os.Exit(1)


}


defer conn.Close()

// 处理接收到的数据


buffer := make([]byte, 1024)


for {


n, addr, err := conn.ReadFromUDP(buffer)


if err != nil {


fmt.Println("Error reading UDP:", err.Error())


return


}


// 处理数据


fmt.Println("Received from", addr, ":", string(buffer[:n]))


}


}


2.2 UDP 客户端

以下是一个简单的 UDP 客户端示例:

go

package main

import (


"bufio"


"fmt"


"net"


"os"


)

func main() {


// 连接到服务器


conn, err := net.Dial("udp", "localhost:8080")


if err != nil {


fmt.Println("Error connecting UDP:", err.Error())


os.Exit(1)


}


defer conn.Close()

// 发送数据


reader := bufio.NewReader(os.Stdin)


for {


fmt.Print("Enter message: ")


message, _ := reader.ReadString('')


conn.Write([]byte(message))


}


}


总结

本文介绍了 Go 语言网络编程中的 TCP 和 UDP 基础。通过简单的示例,读者可以了解到如何使用 Go 语言实现 TCP 和 UDP 服务器和客户端。在实际应用中,可以根据需求对代码进行扩展和优化,以满足不同的网络编程需求。希望本文对读者有所帮助。