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
|
|
|
}
|
|
|
|
|
}
|