Как распечатать TCP-сообщение от netcat в Go?
Поэтому мне нужно написать сервер на Go, который печатает сообщения от следующей команды:
echo "MESSAGE" | nc localhost 8080
Он просто должен напечатать "СООБЩЕНИЕ" в виде строки на стандартный вывод. Я не могу использовать что-то еще, это должна быть эта команда. Это то, что я до сих пор:
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(???), где комментарий // ПЕЧАТЬ СООБЩЕНИЯ ЗДЕСЬ. Как я могу это сделать? Благодарю.
1 ответ
Чтобы напечатать сообщение в кавычках, вы можете использовать %q
спецификатор формата (см. документацию fmt).
Вы захотите преобразовать свой буфер в строку и убедиться, что вы используете только ту часть буфера, которая содержит данные (до 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.