package main
import (
"log"
"net"
"strconv"
)
type Server struct {
localaddr string
}
func New(addr string) *Server {
server := &Server{
localaddr: addr,
}
return server
}
func main() {
s := New("172.16.1.28:1234")
listener, err := net.Listen("tcp", s.localaddr)
if err != nil {
log.Fatal("Starting server failed!")
}
defer listener.Close()
for {
conn, err := listener.Accept()
log.Println(conn)
if err != nil {
log.Println(err)
continue
}
go handleConn(conn)
}
}
func handleConn(c net.Conn) {
log.Println(c.RemoteAddr().String())
defer c.Close()
msghead := make([]byte, 4)
msglen, err := c.Read(msghead)
if err != nil {
log.Println("Read msglen failed!")
}
log.Println("Receive msglen from client:", string(msghead[:msglen]))
length, err := strconv.Atoi(string(msghead))
if err != nil {
log.Println("Atoi failed!")
}
data := make([]byte, length)
datalen, err := c.Read(data)
log.Println("Receive data from client:", string(data[:datalen]))
respmsg := "Receive:" + string(data)
buf := []byte(respmsg)
_, err = c.Write(buf)
}