2015-06-28 2 views
0

Я пытаюсь использовать go channel и goroutine для записи эхо-сервера, но ответа с сервера нет. Следующий сервер прослушивает порт 9090 и создает канал ch для приема принимаемых соединений, затем он переходит к handleClient для обработки сведений о соединении. Является ли следующий код неправильным? У него нет ошибок, когда он равен go build.A go echo server using go channel, но ответа нет с сервера

package main 

import (
    "fmt" 
    "net" 
) 

const (
    CONN_HOST = "localhost" 
    CONN_PORT = "9090" 
    CONN_TYPE = "tcp" 
) 

func main() { 
    listen, err := net.Listen(CONN_TYPE, CONN_HOST + ":" + CONN_PORT) 
    if err != nil { 
     fmt.Println("Error listening: ", err.Error()) 
     return 
    } 

    ch := make(chan net.Conn) 
    go func() { 
     for { 
      conn, err := listen.Accept() 
      if err != nil { 
       fmt.Println("Error Accept: ", err.Error()) 
       return 
      } 
      ch <- conn 
     } 
    }() 
    go handleClient(ch) 
} 

func handleClient(connChan <-chan net.Conn) { 
    var tcpConn net.Conn 
    // fmt.Println("Accepted new client: ", connChan.RemoteAddr().String()) 
    for { 
     tcpConn = <-connChan 
     go Serve(tcpConn) 
    } 
} 

func Serve(conn net.Conn) { 
    // handle the connection 
} 
+2

Ваш основной рутинный выход. Серверная программа должна работать, чтобы обрабатывать соединения. – ikrabbe

+0

Правильно. Спасибо. – qiwihui

ответ

2

Просто измените свой основной бит:

ch := make(chan net.Conn) 
go handleClient(ch) 

for { 
    conn, err := listen.Accept() 
    if err != nil { 
     fmt.Println("Error Accept: ", err.Error()) 
     return 
    } 
    ch <- conn 
} 

для цикла является основным циклом сервера и будет работать вечно, если вы не выходите сервер где-то в другом месте.

+0

Большое спасибо за вашу помощь. Это работает сейчас. – qiwihui

 Смежные вопросы

  • Нет связанных вопросов^_^