Go TCP-сервер всегда выбрасывает EOF после подключения - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть подпрограмма Go, на которой запущен параллельный сервер TCP 4, но каждый раз, когда я подключаюсь к нему через Dial, сервер TCP выдает ошибку, говоря только «EOF». Интересно, что он обрабатывает первую строку данных, но затем дескриптор соединения выдает ошибку.

экземпляр tcp-сервера:


 if err != nil {
   fmt.Println("an error occured: ")
   fmt.Println(err)
   return
 }


 defer l.Close()

 for {
   conn, err_handle := l.Accept()
   if err_handle != nil {
     fmt.Println("node err: ",err_handle)
     return
   }
   go handle_Connection(conn, topics)
 }

handle_Connection:

func handle_Connection(conn net.Conn, topics map[string][]string) {
  defer conn.Close()
  fmt.Println("client connected")

  for {
    data, err_handle := bufio.NewReader(conn).ReadString('\n')
    if err_handle != nil {
      fmt.Println("Err: ", err_handle)
      return
    }

client :

  conn, err := net.Dial("tcp4", ":"+strconv.Itoa(port))

  if err != nil {
    fmt.Println("an error occured: ")
    fmt.Println(err)
  }

1 Ответ

0 голосов
/ 24 февраля 2020

Очень простое решение проблемы заключается в том, что средство чтения данных сервера bufio объявлено в l oop, который обрабатывает данные.

func handle_Connection(conn net.Conn, topics map[string][]string) {
  defer conn.Close()
  fmt.Println("client connected")

  for {
    data, err_handle := bufio.NewReader(conn).ReadString('\n')
    if err_handle != nil {
      fmt.Println("Err: ", err_handle)
      return
    }

должно быть:

func handle_Connection(conn net.Conn, topics map[string][]string) {
  defer conn.Close()
  fmt.Println("client connected")

  data, err_handle := bufio.NewReader(conn).ReadString('\n')
  for {
    if err_handle != nil {
      fmt.Println("Err: ", err_handle)
      return
    }
...