DEV Community

BC
BC

Posted on

5 2

Golang: a simple echo server

#go

It is really easy to write a TCP Echo server in Go.

package main

import (
    "io"
    "log"
    "net"
)

func main() {
    addr := "localhost:9999"
    server, err := net.Listen("tcp", addr)
    if err != nil {
        log.Fatalln(err)
    }
    defer server.Close()

    log.Println("Server is running on:", addr)

    for {
        conn, err := server.Accept()
        if err != nil {
            log.Println("Failed to accept conn.", err)
            continue
        }

        go func(conn net.Conn) {
            defer func() {
                conn.Close()
            }()
            io.Copy(conn, conn)
        }(conn)
    }
}
Enter fullscreen mode Exit fullscreen mode

We used io.Copy here to copy from conn as Reader to conn as Writer (conn implemented the ReadWriter interface)

Run it:

$ go run main.go
Enter fullscreen mode Exit fullscreen mode

Then in another terminal, test it with telnet:

$ telnet localhost 9999
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hello
hello
can you repeat this after me?
can you repeat this after me?
Enter fullscreen mode Exit fullscreen mode

Reinvent your career. Join DEV.

It takes one minute and is worth it for your career.

Okay, let's go

Top comments (0)