登录
首页 >  Golang >  Go教程

Golangnet包实现TCP通信详解

时间:2026-01-03 22:38:46 122浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《Golang net包实现TCP通信教程》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

使用net包实现TCP通信,服务器通过net.Listen监听端口,accept连接后用goroutine处理;客户端用net.Dial连接,通过Read/Write收发数据,注意消息边界与错误处理。

如何在Golang中使用net包实现TCP通信

在Golang中,net包提供了对网络I/O的支持,包括TCP、UDP和Unix域套接字等。实现TCP通信主要依赖于net.Listennet.Dial两个核心函数。下面介绍如何使用net包完成一个简单的TCP客户端与服务器通信。

创建TCP服务器

TCP服务器需要监听指定的地址和端口,等待客户端连接。每当有新连接建立时,启动一个协程处理该连接,保证服务器可以同时服务多个客户端。

示例代码:

package main

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

func main() {
    // 监听本地8080端口
    listener, err := net.Listen("tcp", ":8080")
    if err != nil {
        fmt.Println("监听失败:", err)
        return
    }
    defer listener.Close()
    fmt.Println("服务器已启动,监听 :8080...")

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

        // 启动协程处理连接
        go handleConnection(conn)
    }
}

func handleConnection(conn net.Conn) {
    defer conn.Close()
    scanner := bufio.NewScanner(conn)
    for scanner.Scan() {
        message := strings.TrimSpace(scanner.Text())
        fmt.Printf("收到消息: %s\n", message)

        // 回显消息给客户端
        response := fmt.Sprintf("你发送的是: %s\n", message)
        conn.Write([]byte(response))
    }
}

创建TCP客户端

客户端通过net.Dial连接到服务器,然后可以发送数据并读取响应。

示例代码:

package main

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

func main() {
    // 连接到本地8080端口
    conn, err := net.Dial("tcp", "127.0.0.1:8080")
    if err != nil {
        fmt.Println("连接失败:", err)
        return
    }
    defer conn.Close()

    fmt.Println("已连接到服务器")

    // 从标准输入读取用户输入
    input := bufio.NewScanner(os.Stdin)
    for {
        fmt.Print("请输入消息: ")
        if !input.Scan() {
            break
        }

        line := input.Text()
        if line == "quit" {
            break
        }

        // 发送数据到服务器
        _, err := conn.Write([]byte(line + "\n"))
        if err != nil {
            fmt.Println("发送失败:", err)
            break
        }

        // 读取服务器响应
        buffer := make([]byte, 1024)
        n, err := conn.Read(buffer)
        if err != nil {
            fmt.Println("读取响应失败:", err)
            break
        }

        fmt.Printf("服务器回复: %s", string(buffer[:n]))
    }
}

运行说明

先启动服务器程序,再运行客户端。客户端输入任意文本后,服务器会回显处理结果。输入quit可退出客户端。

  • 服务器使用net.Listen("tcp", ":8080")监听所有IP的8080端口
  • 每个连接由独立的goroutine处理,避免阻塞其他客户端
  • 客户端通过net.Dial发起连接,并使用WriteRead进行通信
  • 注意:TCP是字节流协议,需自行处理消息边界(本例以换行符分隔)
基本上就这些。不复杂但容易忽略细节,比如连接关闭和错误处理。

以上就是《Golangnet包实现TCP通信详解》的详细内容,更多关于的资料请关注golang学习网公众号!

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>