Go:简单的TCP server demo
code:
package main
import (
"bufio"
"fmt"
"log"
"net"
"strings"
"time"
)
func main() {
ln, err := net.Listen("tcp", ":1280")
if err != nil {
panic(err)
}
defer ln.Close()
log.Println("listen on: ", ln.Addr().String())
for {
conn, err := ln.Accept()
if err != nil {
panic(err)
}
log.Println("new connection: ", conn.RemoteAddr())
go handle(conn)
}
}
func handle(conn net.Conn) {
defer func() {
log.Println("close connection: ", conn.RemoteAddr())
conn.Close()
}()
in := bufio.NewReader(conn)
out := bufio.NewWriter(conn)
for {
line, err := in.ReadString('\n')
if err != nil {
panic(err)
}
line = strings.TrimSpace(line)
log.Printf("recv conn[%s]: %s\n", conn.RemoteAddr(), line)
if line == "exit" {
break
}
out.WriteString(fmt.Sprintln(time.Now().String()))
out.Flush()
}
}
运行:
$ go run main.go
2021/05/02 21:25:32 listen on: [::]:1280
2021/05/02 21:25:56 new connection: 127.0.0.1:42026
2021/05/02 21:26:04 recv conn[127.0.0.1:42026]: i'm test1280;
2021/05/02 21:26:22 recv conn[127.0.0.1:42026]: exit
2021/05/02 21:26:22 close connection: 127.0.0.1:42026
测试:
$ telnet 127.0.0.1 1280
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
i'm test1280;
2021-05-02 21:26:04.564817419 +0800 CST m=+31.811738939
exit
Connection closed by foreign host.
$
参考:https://coderwall.com/p/wohavg/creating-a-simple-tcp-server-in-go