在 Golang 中,可以使用 net 包提供的 ListenTCP、AcceptTCP、Read 等函数来实现 TCP 通信,并通过特殊字符组包。以下是一个简单的示例代码:
package main
import (
"fmt"
"net"
"strings"
)
const specialChar = "\n"
func handleConnection(conn net.Conn) {
buf := make([]byte, 1024)
var data string
for {
n, err := conn.Read(buf)
if err != nil {
fmt.Println("Error reading:", err.Error())
break
}
data += string(buf[:n])
packets := strings.Split(data, specialChar)
for i := 0; i < len(packets)-1; i++ {
packet := packets[i]
fmt.Println("Received packet:", packet)
// 处理收到的数据包
data = strings.Join(packets[i+1:], specialChar)
}
if packets[len(packets)-1] == "" {
// 如果最后一个分割出来为空字符串,则表示已经处理完所有数据包
break
}
}
conn.Close()
}
func main() {
l, err := net.Listen("tcp", "localhost:8080")
if err != nil {
fmt.Println("Error listening:", err.Error())
return
}
defer l.Close()
fmt.Println("Listening on localhost:8080")
for {
conn, err := l.Accept()
if err != nil {
fmt.Println("Error accepting:", err.Error())
return
}
go handleConnection(conn)
}
}
这段代码监听本地的 8080 端口,每当接收到 TCP 连接时,开启一个协程处理连接,并根据特殊字符 \n 将接收到的数据拆分为多个数据包进行处理。你可以在 handleConnection 函数中对收到的数据包进行进一步处理。
注意:这只是一个简单的示例代码,实际应用中可能需要考虑更多错误处理和协议规范等因素。
内容由零声教学AI助手提供,问题来源于学员提问




