返回

Go语言Net库之TCP服务器端与客户端开发

后端

简介

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP旨在为应用程序提供一种可靠且高效的数据传输方式。

Go语言中的Net库

Go语言中的net库提供了TCP协议的实现,可以通过该库轻松地开发TCP服务器和客户端程序。net库中主要包含以下几个重要的类型:

  • Listener:用于监听TCP连接的接口。
  • Conn:表示TCP连接的接口。
  • TCPAddr:表示TCP地址的结构体。

开启TCP监听

要开启TCP监听,需要使用net库中的Listen函数。该函数接收一个网络地址和一个协议类型作为参数,并返回一个Listener对象。Listener对象可以用来接受来自客户端的连接请求。

package main

import (
	"fmt"
	"net"
)

func main() {
	// 监听TCP端口号为8080的连接请求
	listener, err := net.Listen("tcp", ":8080")
	if err != nil {
		fmt.Println("Error listening:", err)
		return
	}

	// 接受客户端连接请求,并返回一个`Conn`对象
	conn, err := listener.Accept()
	if err != nil {
		fmt.Println("Error accepting:", err)
		return
	}

	// 使用`Conn`对象进行数据收发
	fmt.Println("Connected to client:", conn.RemoteAddr())
	conn.Write([]byte("Hello, client!"))
	buffer := make([]byte, 1024)
	n, err := conn.Read(buffer)
	if err != nil {
		fmt.Println("Error reading:", err)
		return
	}
	fmt.Println("Received from client:", string(buffer[:n]))

	// 关闭连接
	conn.Close()
}

接收客户端数据

当客户端连接到TCP服务器后,服务器可以使用Conn对象的Read方法来接收客户端发送的数据。Read方法会将数据读入一个字节数组中,并返回读取的字节数。

// 从客户端读取数据
n, err := conn.Read(buffer)
if err != nil {
	fmt.Println("Error reading:", err)
	return
}

向客户端发送消息

服务器可以使用Conn对象的Write方法向客户端发送数据。Write方法会将数据写入到客户端的连接中,并返回写入的字节数。

// 向客户端发送数据
conn.Write([]byte("Hello, client!"))

客户端开发

客户端开发与服务器端开发类似,但需要使用Dial函数来连接到TCP服务器。

// 连接到TCP服务器
conn, err := net.Dial("tcp", "localhost:8080")
if err != nil {
	fmt.Println("Error dialing:", err)
	return
}

// 使用`Conn`对象进行数据收发
fmt.Println("Connected to server:", conn.RemoteAddr())
conn.Write([]byte("Hello, server!"))
buffer := make([]byte, 1024)
n, err := conn.Read(buffer)
if err != nil {
	fmt.Println("Error reading:", err)
	return
}
fmt.Println("Received from server:", string(buffer[:n]))

// 关闭连接
conn.Close()

总结

本文介绍了Go语言中net库的使用,包括如何开启TCP监听、接收客户端数据以及向客户端发送消息。还提供了客户端开发的示例代码,帮助您轻松理解和使用TCP协议。