B
B
Bekkazy2019-01-17 07:12:13
go
Bekkazy, 2019-01-17 07:12:13

How to read data from tcp request of net.Listen method?

func main() {
  // Слушает входящие сообщения
  l, err := net.Listen(CONN_TYPE, CONN_HOST+":"+CONN_PORT)
  if err != nil {
    fmt.Println("Error listening:", err.Error())
    os.Exit(1)
  }
  // Закрывает Listener когда приложение закрывается
  defer l.Close()
  fmt.Println("Listening on " + CONN_HOST + ":" + CONN_PORT)

  for {
    // Прослушивает входящие сообщения
    conn, err := l.Accept()
    if err != nil {
      fmt.Println("Error accepting: ", err.Error())
      os.Exit(1)
    }
    // Обрабатывает содинения в новом goroutine
    go handleRequest(conn)
  }
}

// Обрабатывает входящие соединения
func handleRequest(conn net.Conn) {
  // Создаем буфер для хранения входящих данных
  buf := make([]byte, 1024)

  // Считывает входящие сообщения в буфер
  reqLen, err := conn.Read(buf)

  if err != nil {
    fmt.Println("Error reading:", err.Error())
  }
  fmt.Println(reqLen)
  // Отправляем ответ обратно
  conn.Write([]byte("Message received."))
  // Закрываем соединение когда обработали запрос
  conn.Close()
}

There is such a code, it is not clear how to read the incoming request data.
PS. use of the net/http package is prohibited(

Answer the question

In order to leave comments, you need to log in

1 answer(s)
I
igorzakhar, 2019-01-17
@Bekkazy

Bekkazy , I tried to make a request through Postman , the request method is POST , I choose raw data type . All data comes without loss, nothing is "cut off":
Handler code:

func handleRequest(conn net.Conn) {
  defer conn.Close()
  buf := make([]byte, 1024)
  b := bufio.NewReader(conn)
  for {
    line, err := b.ReadBytes('\n')
    if err != nil { // for example EOF
      break
    }
    buf = append(buf, line...)
  }
  fmt.Print(string(buf))
}

Also, as an option:
func handleRequest(conn net.Conn) {
  message := make([]byte, 1024)
  _, error := conn.Read(message)
  if error != nil {
    fmt.Println(error)
    os.Exit(1)
  }
  fmt.Println(string(message))
  conn.Close() 
}

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question