无法从插槽中读取数据

我正在尝试学习Go语言,并且正在编写一个简单的回显服务器。不过,我很难使它正常工作。


func listen(server string) {

    var buf []byte


    listener, ok := net.Listen("tcp", server)

    if ok != nil {

        fmt.Fprintf(os.Stderr, "Could not listen on socket: %s\n", ok.String())

        return

    }

    conn, ok := listener.Accept()

    if ok != nil {

        fmt.Fprintf(os.Stderr, "Could not accept connection on socket: %s\n", ok.String())

        return

    }


    writelen, ok := conn.Write(strings.Bytes("Ready to receive\n"))

    if ok != nil {

        fmt.Fprintf(os.Stderr, "Could not write to socket: %s\n", ok.String())

    } else {

        fmt.Printf("Wrote %d bytes to socket\n", writelen)

    }


    for ;; {

        readlen, ok := conn.Read(buf)

        if ok != nil {

            fmt.Fprintf(os.Stderr, "Error when reading from socket: %s\n", ok.String())

            return

        }

        if readlen == 0 {

            fmt.Printf("Connection closed by remote host\n")

            return

        }


        fmt.Printf("Client at %s says '%s'\n", conn.RemoteAddr().String(), buf)

    }

}

我从此函数获得以下输出:


[nathan@ebisu ~/src/go/echo_server] ./6.out 1234

Using port 1234

Wrote 17 bytes to socket

Error when reading from socket: EOF

这是我在客户端上看到的:


[nathan@ebisu ~] telnet 127.0.0.1 1234

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is '^]'.

Ready to receive

Connection closed by foreign host.

任何帮助将不胜感激(或指向资源的指针;套接字API上的go文档尚有待改进)。


婷婷同学_
浏览 230回答 2
2回答

qq_遁去的一_1

在您的示例中,buf必须具有确定的大小。您已将其声明为长度为0的切片。声明为:var buf = make([]byte, 1024)
打开App,查看更多内容
随时随地看视频慕课网APP