golang tcp udp监听

发布时间:2024-12-23 05:05:51

Go语言下的TCP/UDP监听

在Go语言中,我们可以使用标准库来创建TCP和UDP服务端,通过监听端口进行网络通信。本文将介绍如何使用Golang来实现TCP和UDP监听。

TCP监听

使用Golang创建TCP监听非常简单。以下是一个简单的TCP服务器示例:

package main

import (
	"fmt"
	"log"
	"net"
)

func main() {
	// 监听地址和端口
	listenAddr := "127.0.0.1:8080"

	// 创建TCP监听器
	listener, err := net.Listen("tcp", listenAddr)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println("TCP服务器已启动,监听地址", listenAddr)

	// 循环等待客户端连接
	for {
		// 接受客户端连接
		conn, err := listener.Accept()
		if err != nil {
			log.Println(err)
			continue
		}

		// 并发处理客户端请求
		go handleTCPConnection(conn)
	}
}

func handleTCPConnection(conn net.Conn) {
	defer conn.Close()

	// 处理客户端请求
	// ...

	fmt.Println("处理来自", conn.RemoteAddr().String(), "的TCP连接")
}

要创建一个TCP监听器,我们使用net包的Listen函数,并指定协议为"tcp"。通过Accept方法接受客户端连接,并使用goroutine并发处理客户端请求。

UDP监听

与TCP服务端类似,Golang也提供了创建UDP服务端的功能。以下是一个简单的UDP服务器示例:

package main

import (
	"fmt"
	"log"
	"net"
)

func main() {
	// 监听地址和端口
	listenAddr := "127.0.0.1:8080"

	// 解析监听地址
	addr, err := net.ResolveUDPAddr("udp", listenAddr)
	if err != nil {
		log.Fatal(err)
	}

	// 创建UDP监听器
	conn, err := net.ListenUDP("udp", addr)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println("UDP服务器已启动,监听地址", listenAddr)

	// 循环接收客户端请求
	for {
		// 接收数据
		buffer := make([]byte, 1024)
		n, addr, err := conn.ReadFromUDP(buffer)
		if err != nil {
			log.Println(err)
			continue
		}

		// 处理数据
		go handleUDPConnection(conn, addr, buffer[:n])
	}
}

func handleUDPConnection(conn *net.UDPConn, addr *net.UDPAddr, data []byte) {
	fmt.Println("处理来自", addr.String(), "的UDP连接")

	// 处理数据
	// ...
}

与TCP服务端相比,UDP服务端需要使用net包的ListenUDP函数创建UDP监听器,并使用ReadFromUDP方法接收数据。之后我们可以使用goroutine并发处理UDP连接。

总结

通过以上示例,我们学习了如何使用Golang来创建TCP和UDP监听。在实际开发中,我们可以根据需要使用TCP或UDP进行网络通信。无论是TCP还是UDP,Golang的网络编程接口都非常简洁易用,能够方便地构建高性能、可靠的网络服务。

相关推荐