tcp-socket/main.go

73 lines
1.3 KiB
Go

package main
import (
"net"
"github.com/sirupsen/logrus"
"myschools.me/suguo/tcp-socket/model"
"myschools.me/suguo/tcp-socket/service"
)
func main() {
srv, err := net.Listen("tcp", ":8087")
if err != nil {
logrus.WithFields(logrus.Fields{
"func": "main",
}).Fatalf("net.Listen: %s", err.Error())
}
defer srv.Close()
go service.DataProcess()
for {
conn, err := srv.Accept()
if err != nil {
logrus.WithFields(logrus.Fields{
"func": "main",
}).Warnf("srv.Accept: %s", err.Error())
continue
}
go connHandler(conn)
}
}
func connHandler(c net.Conn) {
endpoint := c.RemoteAddr().String()
logrus.WithFields(logrus.Fields{
"func": "main",
}).Infof("client is connected, %s", endpoint)
//1.conn是否有效
if c == nil {
logrus.WithFields(logrus.Fields{
"func": "main",
}).Warnf("srv.Accept: %s", "无效的conn")
return
}
defer func() {
if err := c.Close(); err != nil {
logrus.WithFields(logrus.Fields{
"func": "main",
}).Debugf("c.Close: %s", err.Error())
}
}()
service.ClientSet(endpoint, c)
for {
//2.新建网络数据流存储结构
buf := make([]byte, 4096)
cnt, err := c.Read(buf)
//3.2 数据读尽、读取错误 关闭 socket 连接
if cnt == 0 || err != nil {
c.Close()
break
}
service.DataPush(&model.Packet{
Endpoint: endpoint,
Data: buf[:cnt],
})
}
}