ArsenBespalov
@ArsenBespalov
Сам себе разработчик

Как в Go прочитать несколько строк не разрывая соединения?

Есть вот такой код:
func main() {
  ln,  _ := net.Listen("tcp", ":6556")
  defer ln.Close()
  for {
    con, _ := ln.Accept()
    go handleServer(conn)
  }
}

func handleServer(conn net.Conn) {
  buf := make([]byte, 0, 4096)
  n, _ := conn.Read(buf)
  log.Printf("Received line length: %d\n", n)
  conn.Write([]byte("Message received.\n"))
  conn.Close()
}


Вот если в функции handleServer() убрать conn.Close(), тогда соединение не разрывается, но и больше первой строки ничего не читает, однако, как я думал должно было читать каждую строку.

Каким образом можно читать все строки поочерёдно?
  • Вопрос задан
  • 386 просмотров
Решения вопроса 1
Вот, пример кода. Здесь мы читаем входящие данные построчно и посылаем "Message received" после прочтения каждой строки. Чтение продолжается пока клиент не закроет соединение.

package main

import (
	"bufio"
	"log"
	"net"
)

func main() {
	ln, _ := net.Listen("tcp", ":6556")
	defer ln.Close()
	for {
		conn, _ := ln.Accept()
		go handleServer(conn)
	}
}

func handleServer(conn net.Conn) {
	reader := bufio.NewReader(conn)
	defer conn.Close()

	for {
		line, err := reader.ReadString('\n')
		if err != nil {
			return
		}
		conn.Write([]byte("Message received.\n"))
		log.Printf("Received line length: %d\n", len(line))
	}
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы