Golang在CentOS上的网络编程

329
2025/3/31 18:32:20
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在CentOS上使用Golang进行网络编程,首先需要确保你的系统上已经安装了Golang环境。以下是安装Golang和进行网络编程的步骤:

安装Golang

  1. 下载并解压Golang安装包
wget https://golang.google.cn/dl/go1.18.linux-amd64.tar.gz
tar -xvf go1.18.linux-amd64.tar.gz -C /usr/local/
  1. 设置环境变量

编辑~/.bashrc文件,添加以下内容:

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

然后执行以下命令使环境变量生效:

source ~/.bashrc

输入go version查看是否安装成功。

Golang网络编程

Golang的网络编程主要使用net包来实现,该包提供了一组基本的网络功能,包括TCP和UDP套接字、IP地址和端口号的处理,以及一些高级特性,如非阻塞I/O和HTTP客户端库。

TCP通信示例

TCP服务端

package main

import (
	"fmt"
	"net"
)

func main() {
	// 监听端口
	listener, err := net.Listen("tcp", "127.0.0.1:30000")
	if err != nil {
		fmt.Println("listen failed, err:", err)
		return
	}
	defer listener.Close()

	for {
		// 建立连接
		conn, err := listener.Accept()
		if err != nil {
			fmt.Println("accept failed, err:", err)
			continue
		}
		// 创建goroutine处理连接
		go processConn(conn)
	}
}

// 与客户端通信
func processConn(conn net.Conn) {
	defer conn.Close()
	tmp := make([]byte, 1024)
	for {
		n, err := conn.Read(tmp)
		if err != nil {
			fmt.Println("read from client failed, err:", err)
			break
		}
		recvStr := string(tmp[:n])
		fmt.Println(recvStr)
	}
}

TCP客户端

package main

import (
	"bufio"
	"fmt"
	"net"
	"os"
)

func main() {
	// 与server建立连接
	conn, err := net.Dial("tcp", "127.0.0.1:8080")
	if err != nil {
		fmt.Println("dial failed, err:", err)
		return
	}
	defer conn.Close()

	// 发送数据
	for {
		fmt.Print("请输入发送内容: ")
		reader := bufio.NewReader(os.Stdin)
		msg, _ := reader.ReadString('\n')
		if msg == "quit" {
			break
		}
		conn.Write([]byte(msg))
	}
}

解决TCP通信中的常见问题

  • 拆包:通过使用带消息头的协议,在消息头中记录数据的长度,可以解决拆包问题。
  • 粘包:使用定长的协议,每次读取定长的内容,不够的使用空格补齐,或者使用消息边界,比如使用\n分隔不同的消息。

以上就是在CentOS上使用Golang进行网络编程的基本步骤和示例代码。你可以根据自己的需求进行进一步的定制和扩展。

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: centos sftp虚拟用户配置