gpt4 book ai didi

go - 如何在 Go 中从 netcat 打印 TCP 消息?

转载 作者:数据小太阳 更新时间:2023-10-29 03:43:50 24 4
gpt4 key购买 nike

所以我需要用 Go 编写一个服务器来打印来自以下命令的消息:

echo "MESSAGE" | nc localhost 8080

它只需将“MESSAGE”作为字符串打印在标准输出上。我不能使用别的东西,它必须是这个命令。这是我到目前为止所拥有的:

package main

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

func main() {
ln, err := net.Listen("tcp", ":8080")
check(err)
for {
conn, err := ln.Accept()
check(err)
go handleConnection(conn)
}
}

func handleConnection(conn net.Conn) {
buf := make([]byte, 1024)
reqLen, err := conn.Read(buf)
fmt.Println(reqLen)
check(err)
// PRINT MESSAGE HERE
conn.Write([]byte("Message received."))
fmt.Println(conn.RemoteAddr().String())
conn.Close()
}


func check(err error) {
if err != nil {
fmt.Println("Error:" + err.Error())
os.Exit(1)
}
}

我需要一个 fmt.Println(???) 注​​释//PRINT MESSAGE HERE 所在的位置。我怎样才能做到这一点?谢谢。

最佳答案

要在引号中打印消息,您可以使用 %q 格式说明符(请参阅 fmt docs)。

您需要将缓冲区转换为字符串,并确保只使用缓冲区中包含数据的部分(直到 reqLen):

// buf[:reqLen] is a slice of the first reqLen bytes of buf.
// string(...) creates a string from a slice of bytes.
fmt.Printf("Message contents: %q\n", string(buf[:reqLen]))

这将打印:

Message contents: "message\n"

\necho 插入。如果您不需要它,请运行 echo -n ...,或使用 strings.TrimSpace 去除周围的空白/换行符| .

关于go - 如何在 Go 中从 netcat 打印 TCP 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48379953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com