protected void ParsePacket() { while (m_by_buffer.Available >= NetID.PacketHeadSize) { if (m_by_buffer.Peek(ref head_by, NetID.PacketHeadSize)) { ushort msg_length = BitConverter.ToUInt16(head_by, 0); if (m_by_buffer.Available >= msg_length + NetID.PacketHeadSize) { //读取包数据 m_by_buffer.Skip(NetID.PacketHeadSize); ushort header = m_by_buffer.ReadUShort(); m_dispatcher_buffer.Clear(); int len = m_by_buffer.Read(m_dispatcher_buffer, msg_length - sizeof(ushort)); if (len != msg_length - sizeof(ushort)) { Log.Error("读取错误"); m_by_buffer.Skip(msg_length - sizeof(ushort));//跳到下一个位置 continue; } //派发数据 if (m_net_socket != null && m_net_socket.OnReceive != null) { m_net_socket.OnReceive(m_conn_idx, header, m_dispatcher_buffer); } } else { break; } } else { break; } } }