使用Go写一份TCP SOCKET代码,解决粘包问题(不懂什么是粘包自己去查一下)
时间: 2024-04-08 16:30:36 浏览: 160
下面是一个使用Go语言编写的TCP Socket代码示例,可以解决TCP粘包问题:
```go
package main
import (
"bufio"
"fmt"
"net"
"strings"
)
func main() {
listener, err := net.Listen("tcp", "localhost:8888")
if err != nil {
fmt.Println("Error listening:", err.Error())
return
}
defer listener.Close()
fmt.Println("Server started. Listening on localhost:8888")
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println("Error accepting connection:", err.Error())
return
}
go handleConnection(conn)
}
}
func handleConnection(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
}
message = strings.TrimSpace(message)
fmt.Println("Received message:", message)
response := "Echo: " + message + "\n"
conn.Write([]byte(response))
}
}
```
在该示例代码中,我们创建了一个TCP服务器,并监听本地的8888端口。当有客户端连接到服务器时,会创建一个新的goroutine来处理每个连接。
在`handleConnection`函数中,我们使用`bufio.NewReader`创建一个读取器来读取客户端发送的数据。然后,我们使用`ReadString`函数读取以换行符结束的一行数据。这里我们假设每次客户端发送的消息都以换行符结尾。
接下来,我们对接收到的消息进行处理,并返回一个回复消息。在处理之前,我们使用`strings.TrimSpace`函数去除消息前后的空格。
最后,我们使用`conn.Write`将回复消息发送给客户端。
这样就实现了一个简单的TCP Socket服务器,并解决了TCP粘包问题。在实际开发中,根据具体需求,可能需要更复杂的协议设计和数据处理方式来解决粘包问题。
阅读全文