Bekkazy
@Bekkazy

Как считать данные с tcp запроса метода net.Listen?

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()
}


Есть такой код, не понятно как считать входящие данные запроса.

PS. использование пакета net/http запрещено(
  • Вопрос задан
  • 421 просмотр
Решения вопроса 1
igorzakhar
@igorzakhar
Bekkazy, попробовал сделать запрос через Postman, метод запроса POST, тип данных выбираю raw. Все данные приходят без потерь, ничего не "обрезается":
5c44802ca75e7865309344.png
Код обработчика:
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))
}

Еще, как вариант:
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() 
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы