Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Ошибка сервера IOException
#21
PROGRAMMATOR.....you can share your server? Smile
Ответ
#22
PROGRAMMATOR Написал:514 - это опкод серверного пакета, какой же там крип/декрипт? Smile Нужно видеть тот класс, где у тебя подготавливаются данные к отправке клиенту (Где у тебя BinaryWriter и где ты проставляешь размер и опкод).

Код:
private readonly Logger Log = Logger.Instance;

                byte[] buffer = new byte[2048];

                NetworkStream Stream { get; set; }

                public int Id { get; set; }

                public byte[] RemoteIPAddress { get; set; }

                public int RemoteUdpPort { get; set; }

                public ClientConnection(TcpClient client)
                {
                    Stream = client.GetStream();
                    // PROTOCOL_BASE_CONNECT_ACK
                    SendPacket(new PROTOCOL_BASE_CONNECT_ACK());
                    Log.Info("New connected");
                    Stream.BeginRead(buffer, 0, buffer.Length, BeginRead, null);
                }

                public void BeginRead(IAsyncResult asyncResult)
                {
                    try
                    {
                        int received = Stream.EndRead(asyncResult);
                        Log.Info("Received = {0}", received);
                        while (received >= 6)
                        {
                            int length = BitConverter.ToUInt16(buffer, 0) & 0x7FFF;

                            byte[] temp = new byte[length + 2];
                            Array.Copy(buffer, 2, temp, 0, temp.Length);
                            int bits = Id % 7 + 1;
                            BitShift.Unshift(temp, bits);
                            byte[] opcode = new byte[] { temp[0], temp[1] };
                            RecvOpcode packet = (RecvOpcode)BitConverter.ToUInt16(opcode, 0);
                            Type t = Type.GetType("PiercingBlow.Login.Network.Recv." + packet.ToString());
                            Log.Info("PacketId = {0} Lenght = {1}", BitConverter.ToUInt16(opcode, 0), temp.Length);
                            if (t != null)
                            {
                                ClientPacket clientpacket = (ClientPacket)Activator.CreateInstance(t);
                                clientpacket.Client = this;
                                clientpacket.Process(buffer);
                            }
                            else
                            {
                                Log.Trace(temp.ToHex());
                            }
                            received -= length + 4;
                            Array.Copy(buffer, length + 4, buffer, 0, received);
                        }
                        Stream.BeginRead(buffer, 0, buffer.Length, BeginRead, null);
                    }
                    catch (IOException)
                    {
                        Disconnected();
                    }
                    catch (Exception ex)
                    {
                        Disconnected();
                        Log.Error("error",ex);
                    }
                    }

        private void Disconnected()
        {            
        }

        public void SendPacket(ServerPacket packet)
        {
            packet.Client = this;
            packet.WriteImpl();
            byte[] data = packet.ToByteArray();
            byte[] lenght = BitConverter.GetBytes((short)data.Length);
            byte[] opcode = BitConverter.GetBytes(Convert.ToInt16((int)Enum.Parse(typeof(SendOpcode), packet.GetType().Name)));
            byte[] buff = new byte[data.Length + 4];
            Array.Copy(lenght, 0, buff, 0, lenght.Length);
            Array.Copy(opcode, 0, buff, 2, opcode.Length);
            Array.Copy(data, 0, buff, 4, data.Length);
            Stream.Write(buff, 0, buff.Length);
            Log.Debug("Send {0} bytes", buff.Length);
        }
Ответ
#23
Boris2105, ничего не понял, ты сказал:

Boris2105;412235 Написал:вместо 514 было 3948

Как определил, что вместо 514 пришел 3948?
Ответ
#24
PROGRAMMATOR Написал:Boris2105, ничего не понял, ты сказал:



Как определил, что вместо 514 пришел 3948?

ну это был первый пакет и у него был такой опкод, я не уверен что это был 514 , но это единственный пакет который он просил и все , больше никаких .
Вот так выглядит пакет
[Изображение: AKYjVX5FeSs.jpg]
Ответ
#25
Очень похоже на то, что в PROTOCOL_BASE_CONNECT_ACK передали не правильный идентификатор сессии, что привело к некорректному декрипту данных от клиента.

Exile03, what do I need it for?
Ответ
#26
OFFTOP
Ответ
#27
PROGRAMMATOR Написал:Очень похоже на то, что в PROTOCOL_BASE_CONNECT_ACK передали не правильный идентификатор сессии, что привело к некорректному декрипту данных от клиента.

Exile03, what do I need it for?

не понял
Ответ
#28
SessionId в пакете PROTOCOL_BASE_CONNECT_ACK смотри его структуру.

И вот здесь:

Код:
int bits = Id % 7 + 1;

Не совпадают. Других причин я не знаю.
Ответ
#29
PROGRAMMATOR Написал:SessionId в пакете PROTOCOL_BASE_CONNECT_ACK смотри его структуру.

И вот здесь:

Код:
int bits = Id % 7 + 1;

Не совпадают. Других причин я не знаю.

[Изображение: _z9RDp2bC1M.jpg]

Вот что бывает когда убираю пакет PROTOCOL_BASE_GET_USER_INFO_ACK
Ответ
#30
PROGRAMMATOR Написал:SessionId в пакете PROTOCOL_BASE_CONNECT_ACK смотри его структуру.

И вот здесь:

Код:
int bits = Id % 7 + 1;

Не совпадают. Других причин я не знаю.

да ошибка была в сессии
ClientManager
Вот только как мне это перенести в PROTOCOL_BASE_CONNECT_ACK
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Сервера Point Blank / Piercing Blow Awiion 5 9,650 06-28-2018, 07:45 PM
Последний пост: AngryKitten
  Ошибка при запуске клиента Boris2105 19 3,501 05-20-2017, 12:22 PM
Последний пост: Boris2105
  [HELP] Error Login (IOException) yGGhz 2 1,272 12-21-2016, 02:23 PM
Последний пост: Awiion
  Дампы сервера foxovsky 8 2,157 11-20-2016, 01:30 PM
Последний пост: Alter53
  Point Blank MyInfo ошибка Yusqa 2 1,779 05-01-2016, 11:28 AM
Последний пост: crayonnet
  Ошибка при входе на канал Boris2105 6 1,514 02-05-2016, 05:20 PM
Последний пост: Boris2105
  Ошибка bugtrap Boris2105 2 2,083 01-27-2016, 09:33 PM
Последний пост: Boris2105

Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)