英文:
How do you read from a connection without creating a temp byte slice in Go
问题
将发送到我的net.Conn
的数据是使用TCP网络的数据包。这些数据包的大小都不同。我应该如何创建一个与传入数据大小完全相同的缓冲区?
目前,我正在分配一个具有可能的最大数据包大小的字节切片,然后再次对其进行切片。
for {
data := make([]byte, 2097151)
r, _ := (*c).Read(data)
data = data[:r]
}
以下是翻译好的内容:
发送到net.Conn
的数据是使用TCP网络的数据包。这些数据包的大小各不相同。我应该如何创建一个与传入数据大小完全相同的缓冲区?
目前,我正在分配一个具有可能的最大数据包大小的字节切片,然后再次对其进行切片。
for {
data := make([]byte, 2097151)
r, _ := (*c).Read(data)
data = data[:r]
}
英文:
The data being sent to my net.Conn
are packets using TCP network. These packets are all different sizes. How would I make a buffer that's the exact size of the data coming in?
Currently I'm allocating a byte slice which has the biggest packet possible and then slicing it again.
for{
data := make([]byte, 2097151)
r, _ := (*c).Read(data)
data = data[:r]
}
答案1
得分: 2
你可以使用bufio
来从客户端读取数据。
一个基本的示例:
func TCPServerReadFromConnection() {
server, err := net.Listen("tcp", ":8080")
if err != nil {
panic(err)
}
defer server.Close()
conn, err := server.Accept()
if err != nil {
panic(err)
}
defer conn.Close()
// 这是一个用于接收连接上的数据的扫描器
scanner := bufio.NewScanner(conn)
for scanner.Scan() {
val := scanner.Text()
fmt.Println(val)
}
}
英文:
You can use bufio
to read from client
A basic example
func TCPServerReadFromConnection() {
server, err := net.Listen("tcp", ":8080")
if err != nil {
panic(err)
}
defer server.Close()
conn, err := server.Accept()
if err != nil {
panic(err)
}
defer conn.Close()
// This is a scanner for accepting the data coming over connection
scanner := bufio.NewScanner(conn)
for scanner.Scan() {
val := scanner.Text()
fmt.Println(val)
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论