如何在 Go 中从 netcat 打印 TCP 消息?
How to print TCP Message from netcat in Go?
所以我需要用 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"
\n
被 echo
插入。如果你不想要它,运行 echo -n ...
,或者使用 strings.TrimSpace.
去除周围的 whitespace/newlines
所以我需要用 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"
\n
被 echo
插入。如果你不想要它,运行 echo -n ...
,或者使用 strings.TrimSpace.