package main
import (
"bufio"
"fmt"
"io"
"log"
"net"
)
func main() {
ln, err := net.Listen("tcp", "0.0.0.0:8080")
if err != nil {
log.Fatalln(err)
}
fmt.Println("listening on", ln.Addr())
for id := 0; ; id++ {
if conn, err := ln.Accept(); err == nil {
fmt.Printf("client[%d] connected from %s\n", id, conn.RemoteAddr())
go echo(conn, id)
}
}
}
func echo(conn io.ReadWriteCloser, id int) {
defer func() {
fmt.Printf("client[%d] disconnected: read: EOF\n", id)
conn.Close()
}()
for scanner := bufio.NewScanner(conn); scanner.Scan(); {
line := scanner.Text()
if _, err := io.WriteString(conn, fmt.Sprintln(line)); err != nil {
fmt.Printf("client[%d] disconnected: write: %s\n", id, err.Error())
break
}
fmt.Println(fmt.Sprintf("client[%d]: %s", id, line))
}
}