Golang中的通道与TCP / IP套接字无法正常工作

时间:2017-07-03 01:34:06

标签: go tcp-ip unix-socket

我刚开始为使用TCP / IP套接字在C中制作的服务器编写Golang客户端,然后我发现我的频道无效。

任何想法为什么?

{{1}}

使用netcat测试我的服务器会产生以下输出: http://pasted.co/a37b2954

但我只有:http://pasted.co/f13d56b4

我是Golang的新手,所以也许我错了(我可能是)

1 个答案:

答案 0 :(得分:2)

频道使用情况看起来没问题,但是,自您等待换行后,从频道中检索值会覆盖buf := <-read之前的读取值。

此外,您可以使用bufio.Reader将字符串读取到换行符。

您的代码段是部分的,因此无法执行,请尝试告诉我:

func reader(r io.Reader, channel chan<- string) {
    bufReader := bufio.NewReader(conn)
    for {
        msg, err := bufReader.ReadString('\n')
        if err != nil { // connection error or connection reset error, etc
           break
        }
        channel <- msg
    }
}

func client(e *gowd.Element) {
    f, err := os.Create("/tmp/dat2")
    if err != nil {
        log.Fatal()
    }
    read := make(chan string)
    c, err := net.Dial("tcp", "127.0.0.1:4242")
    if err != nil {
        log.Fatal(err)
    }
    go reader(c, read)
    for {
        msg := <-read
        if msg == "WELCOME" {
            fmt.Fprint(c, "GRAPHIC\n")
        }
        f.WriteString(msg + "\n")
    }
    //...
}

修改

请查找通用TCP客户端读取数据的示例。我还从上面的代码片段中删除了扫描仪并添加了缓冲区读取器。

func main() {
    conn, err := net.Dial("tcp", "127.0.0.1:4242")
    if err != nil {
        log.Fatal(err)
    }

    reader := bufio.NewReader(conn)
    for {
        msg, err := reader.ReadString('\n')
        if err != nil {
            break
        }
        fmt.Println(msg)
    }
}