Answer the question
In order to leave comments, you need to log in
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()
}
Answer the question
In order to leave comments, you need to log in
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))
}
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 questionAsk a Question
731 491 924 answers to any question