I am trying to learn a translation language and I am writing a simple echo server. I have difficulty getting this to work.
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) } }
I get the following result from this function:
[ nathan@ebisu ~/src/go/echo_server] ./6.out 1234 Using port 1234 Wrote 17 bytes to socket Error when reading from socket: EOF
This is what I see on the client:
[ 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.
Any help would be appreciated (or pointers to resources, go documentation on the socket API is poor).
Thanks,
Nathan
source share