linux

Golang在Linux如何进行网络编程

小樊
40
2025-09-08 15:39:13
栏目: 编程语言

在Linux上使用Golang进行网络编程,你可以使用Go标准库中的"net"包。这个包提供了很多用于实现TCP、UDP、DNS等网络功能的功能。以下是一个简单的示例,展示了如何使用Golang在Linux上进行TCP网络编程。

  1. 首先,创建一个名为server.go的文件,用于编写TCP服务器代码:
package main

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

func main() {
	// 监听端口
	listener, err := net.Listen("tcp", ":8080")
	if err != nil {
		fmt.Println("Error listening:", err.Error())
		os.Exit(1)
	}
	defer listener.Close()

	fmt.Println("Listening on :8080")

	for {
		// 接受客户端连接
		conn, err := listener.Accept()
		if err != nil {
			fmt.Println("Error accepting:", err.Error())
			continue
		}

		// 处理客户端连接
		go handleRequest(conn)
	}
}

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

	reader := bufio.NewReader(conn)
	for {
		// 读取客户端发送的数据
		message, err := reader.ReadString('\n')
		if err != nil {
			fmt.Println("Error reading:", err.Error())
			break
		}

		fmt.Print("Received message: ", string(message))

		// 向客户端发送响应
		_, err = conn.Write([]byte("Message received\n"))
		if err != nil {
			fmt.Println("Error writing:", err.Error())
			break
		}
	}
}
  1. 创建一个名为client.go的文件,用于编写TCP客户端代码:
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()

	fmt.Println("Connected to server")

	reader := bufio.NewReader(os.Stdin)
	for {
		// 从标准输入读取用户输入
		fmt.Print("Enter message: ")
		message, _ := reader.ReadString('\n')

		// 向服务器发送数据
		_, err = conn.Write([]byte(message))
		if err != nil {
			fmt.Println("Error sending:", err.Error())
			break
		}

		// 读取服务器响应
		response, err := bufio.NewReader(conn).ReadString('\n')
		if err != nil {
			fmt.Println("Error receiving:", err.Error())
			break
		}

		fmt.Print("Server response: ", response)
	}
}
  1. 分别运行服务器和客户端:
# 在一个终端中运行服务器
go run server.go

# 在另一个终端中运行客户端
go run client.go

现在,你可以在客户端输入消息,然后查看服务器接收到的消息以及服务器发送的响应。

这只是一个简单的示例,你可以根据自己的需求使用"net"包中的其他功能来实现更复杂的网络编程。

0
看了该问题的人还看了