Как распечатать 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.

Другие вопросы по тегам