package main
import (
"net"
"io"
"log"
)
func cliWrite(c net.Conn, ch chan []byte) {
for {
buff, ok := <-ch
if !ok {
break
}
n, err := c.Write(buff)
if n == 0 || err != nil {
break
}
}
}
func cliRead(c net.Conn, ch chan []byte) {
for {
buff := make([]byte, 64)
n, err := io.ReadAtLeast(c, buff, 1)
if n == 0 || err != nil {
close(ch)
c.Close()
break
}
ch <- buff
}
}
func main() {
l, err := net.Listen("tcp", ":9999")
if err != nil {
log.Fatalf("listen failed:%v\n", err)
}
for {
conn, err := l.Accept()
if err != nil {
log.Fatalf("accept failed:%v\n", err)
}
ch := make(chan []byte, 10)
go cliWrite(conn, ch)
go cliRead(conn, ch)
}
}