func (this *NodeComponent) ReceiveMsg() { defer func() { if err := recover(); err != nil { fmt.Println("NodeComponent Error: " + err.(error).Error()) } }() headbuff := make([]byte, define.PACKET_HEAD_LEN) for { var head structure.Head var Packet structure.Packet //如果无连接,尝试重新建立tcp连接 if this.StreeConn == nil { this.ReConnect() continue } //从tcp连接中先读取头部信息 n, err := this.StreeConn.Read(headbuff) //如果读取出错,则尝试重新建立tcp连接 if n == 0 || n != define.PACKET_HEAD_LEN || err != nil { fmt.Println("NodeComponent Error:Read STree msg") this.ReConnect() continue } err = head.Decode(headbuff) if err != nil { fmt.Println("NodeComponent Error: Decode Stree msg") return } databuff := make([]byte, head.DataLen) //再从连接中读取剩余数据 n, err = this.StreeConn.Read(databuff) if n == 0 || n != int(head.DataLen) || err != nil { fmt.Println("NodeComponent Error: Read Stree Data") this.ReConnect() continue } Packet.Head = head Packet.Data = databuff msg := protocol.Message{} //Packet.Data至少44位 err = msg.Decode(Packet.Data) if err != nil { fmt.Println("NodeComponent Error:MSG Decode Failed", err) return } this.ReceiveMsgHandle(&Packet) } }