From 892fd26c5ad874f2219df26a3097d26988e23129 Mon Sep 17 00:00:00 2001 From: duanhf2012 Date: Tue, 21 Jan 2020 11:30:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=A7=A3=E5=8C=85bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Test/logicservice/SubNet1_Service.go | 3 ++- network/tcpsocketserver.go | 37 ++++++++++++++++++++-------- sysservice/tcpsocketpbservice.go | 6 +++++ 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/Test/logicservice/SubNet1_Service.go b/Test/logicservice/SubNet1_Service.go index f54dbe7..dc2887f 100644 --- a/Test/logicservice/SubNet1_Service.go +++ b/Test/logicservice/SubNet1_Service.go @@ -1,7 +1,7 @@ package logicservice import ( - + "fmt" "github.com/duanhf2012/origin/Test/msgpb" "github.com/duanhf2012/origin/network" "github.com/duanhf2012/origin/sysservice" @@ -51,6 +51,7 @@ func (ws *SubNet1_Service) OnRun() bool { func (ws *SubNet1_Service) MessageHandler(pClient *network.SClient,msgtype uint16,msg proto.Message){ + fmt.Print(pClient.GetId(),"\n",msg) } func (ws *SubNet1_Service) ConnEventHandler (pClient *network.SClient){ diff --git a/network/tcpsocketserver.go b/network/tcpsocketserver.go index 22235a3..e523307 100644 --- a/network/tcpsocketserver.go +++ b/network/tcpsocketserver.go @@ -17,6 +17,7 @@ type ITcpSocketServerReciver interface { OnConnected(pClient *SClient) OnDisconnect(pClient *SClient) OnRecvMsg(pClient *SClient, pPack *MsgBasePack) + VerifyPackType(packtype uint16) bool } @@ -139,13 +140,23 @@ func (slf *SClient) listendata(){ return } - fillsize,bfillRet := pack.FillData(buff,buffDataSize) + fillsize,bfillRet,fillhead := pack.FillData(buff,buffDataSize) + //提交校验头 + if fillhead == true { + if pack.packsize>slf.tcpserver.MaxRecvPackSize || slf.tcpserver.iReciver.VerifyPackType(pack.packtype) == false { + service.GetLogger().Printf(service.LEVER_WARN, "VerifyPackType error clent id %d is disconnect %d,%d",slf.id,pack.packtype, pack.packsize) + return + } + } if bfillRet == true { slf.recvPack.Push(pack) pack = MsgBasePack{} } - buff = append(buff[fillsize:]) - buffDataSize -= fillsize + if fillsize>0 { + buff = append(buff[fillsize:]) + buffDataSize -= fillsize + } + } } @@ -160,28 +171,30 @@ func (slf *MsgBasePack) Bytes() []byte{ return bRet } -//返回值:填充多少字节,是否完成 -func (slf *MsgBasePack) FillData(bdata []byte,datasize uint16) (uint16,bool) { +//返回值:填充多少字节,是否完成,是否填充头 +func (slf *MsgBasePack) FillData(bdata []byte,datasize uint16) (uint16,bool,bool) { var fillsize uint16 + fillhead := false //解包头 if slf.packsize ==0 { if datasize < 4 { - return 0,false + return 0,false,fillhead } slf.packsize= binary.BigEndian.Uint16(bdata[:2]) slf.packtype= binary.BigEndian.Uint16(bdata[2:4]) fillsize += 4 + fillhead = true } //解包体 - if slf.packsize>0 && slf.packsize>=datasize { + if slf.packsize>0 && datasize+4>=slf.packsize { slf.body = append(slf.body, bdata[fillsize:slf.packsize]...) - fillsize += (datasize - fillsize) - return fillsize,true + fillsize += (slf.packsize - fillsize) + return fillsize,true,fillhead } - return fillsize,false + return fillsize,false,fillhead } func (slf *MsgBasePack) Clear() { @@ -226,3 +239,7 @@ func (slf *SClient) Close(){ } } + +func (slf *SClient) GetId() uint64{ + return slf.id +} diff --git a/sysservice/tcpsocketpbservice.go b/sysservice/tcpsocketpbservice.go index 4229b95..75dadbe 100644 --- a/sysservice/tcpsocketpbservice.go +++ b/sysservice/tcpsocketpbservice.go @@ -98,6 +98,12 @@ func (slf *TcpSocketPbService) OnDisconnect(pClient *network.SClient){ } } +func (slf *TcpSocketPbService) VerifyPackType(packtype uint16) bool{ + _,ok := slf.mapMsg[packtype] + return ok +} + + func (slf *TcpSocketPbService) OnExceptMsg (pClient *network.SClient,pPack *network.MsgBasePack,err error){ if slf.exceptMsgHandler!=nil { slf.exceptMsgHandler(pClient,pPack,err)