tcp-socket/main.go

73 lines
1.3 KiB
Go
Raw Normal View History

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