Go语言通过net包实现TCP通信,服务器使用net.Listen监听端口,客户端通过net.Dial建立连接。示例中服务器并发处理多个客户端,利用Goroutine实现连接独立读写,客户端发送消息并接收响应,展示TCP连接建立、数据传输及生命周期管理全过程。

在Go语言中进行网络编程,TCP通信是一个常见且重要的应用场景。Go标准库net包提供了简单而强大的接口来实现TCP客户端与服务器之间的连接建立和数据传输。本文将介绍TCP连接的基本流程,并通过一个简单的示例展示如何使用Golang实现TCP通信。
TCP是面向连接的协议,通信前必须先建立连接。在Go中,这一过程分为两部分:服务器监听和客户端拨号。
服务器通过net.Listen函数监听指定地址和端口,等待客户端连接请求。当客户端调用net.Dial发起连接时,TCP三次握手完成,连接建立成功,双方即可通过net.Conn接口进行读写操作。
以下是一个简单的TCP服务器示例:
立即学习“go语言免费学习笔记(深入)”;
package main
import (
"bufio"
"fmt"
"net"
"log"
)
func main() {
// 监听本地8080端口
listener, err := net.Listen("tcp", ":8080")
if err != nil {
log.Fatal("监听失败:", err)
}
defer listener.Close()
fmt.Println("服务器启动,监听 :8080...")
for {
// 接受客户端连接
conn, err := listener.Accept()
if err != nil {
log.Println("接受连接失败:", err)
continue
}
// 启动协程处理连接
go handleConnection(conn)
}
}
// 处理客户端请求
func handleConnection(conn net.Conn) {
defer conn.Close()
reader := bufio.NewReader(conn)
for {
// 读取客户端消息
msg, err := reader.ReadString('\n')
if err != nil {
log.Println("读取失败:", err)
return
}
fmt.Printf("收到消息: %s", msg)
// 回应客户端
conn.Write([]byte("已收到: " + msg))
}
}
对应的客户端代码如下:
package main
import (
"bufio"
"fmt"
"net"
"os"
"strings"
)
func main() {
// 连接本地服务器
conn, err := net.Dial("tcp", "localhost:8080")
if err != nil {
fmt.Println("连接失败:", err)
return
}
defer conn.Close()
fmt.Println("已连接到服务器")
// 从标准输入读取用户输入
inputReader := bufio.NewReader(os.Stdin)
for {
fmt.Print("请输入消息: ")
line, _ := inputReader.ReadString('\n')
line = strings.TrimSpace(line)
if line == "quit" {
break
}
// 发送消息到服务器
conn.Write([]byte(line + "\n"))
// 读取服务器响应
response, err := bufio.NewReader(conn).ReadString('\n')
if err != nil {
fmt.Println("读取响应失败:", err)
break
}
fmt.Printf("服务器回应: %s", response)
}
}
先运行服务器程序,再启动客户端。客户端输入任意文本后,服务器会打印收到的内容并返回确认信息。输入quit可退出客户端。
这个例子展示了Go中TCP通信的核心机制:并发处理连接、基于流的读写、连接生命周期管理。利用Goroutine,服务器可以轻松支持多个客户端同时连接。
基本上就这些。Golang的简洁语法和强大的并发模型让网络编程变得直观高效。
以上就是Golang网络编程TCP连接建立与示例的详细内容,更多请关注php中文网其它相关文章!
编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号