golang 简易tcpserver和tcpclient
package main
import (
"flag"
"fmt"
"net"
"strconv"
)
//Port 端口
var Port string
func main() {
fmt.Println("process start...")
flag.StringVar(&Port, "p", "", "proc port")
flag.Parse()
if Port == "" {
fmt.Print("port is null\n")
return
}
p, err := strconv.Atoi(Port)
if err != nil {
fmt.Printf("port is not number and err:[%v]\n", err)
return
}
addr := fmt.Sprintf("0.0.0.0:%d", p)
listener, err := net.Listen("tcp", addr)
if err != nil {
fmt.Printf("err! addr %s open faild err:[%v]\n", addr, err)
return
}
for {
conn, err := listener.Accept()
if err != nil {
fmt.Printf("listen err:[%v]\n", err)
}
go handConn(conn)
}
}
func handConn(conn net.Conn) {
defer func() {
fmt.Printf("client [%s] close\n", conn.RemoteAddr().String())
conn.Close()
}()
var buf [1024]byte
for {
n, err := conn.Read(buf[:])
if err != nil {
fmt.Printf("read from %s msg faild err:[%v]\n", conn.RemoteAddr().String(), err)
break
}
fmt.Printf("rev data from %s msg:%s\n", conn.RemoteAddr().String(), string(buf[:n]))
}
}