商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Golang在Linux中的网络编程怎样做

Golang在Linux中的网络编程怎样做

  发布于2026-07-03 阅读(0)

扫一扫,手机访问

说到Linux下的Golang网络编程,标准库net可以说是一把趁手的利器。它覆盖了TCP、UDP、ICMP乃至Unix域套接字等常见协议,基本上日常需求都能搞定。下面用一个典型的TCP服务端+客户端示例,带你快速上手。

Golang在Linux中的网络编程怎样做

一、先搭一个TCP服务器

package main

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

func main() {
    port := "8080"
    listener, err := net.Listen("tcp", ":"+port)
    if err != nil {
        fmt.Println("Error listening:", err.Error())
        os.Exit(1)
    }
    defer listener.Close()
    fmt.Println("Listening on " + port)

    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())
            return
        }
        fmt.Print("Received message: ", string(message))
        conn.Write([]byte("Message received\n"))
    }
}

这段代码监听8080端口,每来一个连接就开一个goroutine去处理,子协程里不停地读消息并回复确认。典型的并发模型,简洁又高效。

二、再写一个TCP客户端

package main

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

func main() {
    server := "127.0.0.1"
    port := "8080"
    conn, err := net.Dial("tcp", server+":"+port)
    if err != nil {
        fmt.Println("Error connecting:", err.Error())
        os.Exit(1)
    }
    defer conn.Close()

    go func() {
        reader := bufio.NewReader(conn)
        for {
            message, err := reader.ReadString('\n')
            if err != nil {
                fmt.Println("Error reading:", err.Error())
                return
            }
            fmt.Print("Received message: ", string(message))
        }
    }()

    reader := bufio.NewReader(os.Stdin)
    for {
        fmt.Print("Enter message: ")
        text, _ := reader.ReadString('\n')
        conn.Write([]byte(text))
        if strings.ToLower(text) == "exit" {
            break
        }
    }
}

客户端这边,先连上服务端,然后开一个后台goroutine持续接收服务端回显的消息,主协程则从标准输入读用户输入,发出去。输入“exit”退出。

三、跑起来看看

先启动服务器程序,再启动客户端。在客户端输入任意消息,服务器会接收到并回复“Message received”,客户端则打印出这个回复。整个过程很直观,一个最小可用的TCP回显服务就完成了。

当然,这只是个入门示例。net库还藏着不少好东西:处理HTTP请求、解析DNS、构建UDP广播……更多玩法可以直接翻官方文档:https://pkg.go.dev/net

本文转载于:https://www.yisu.com/ask/93490200.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注