WesteroS 132 Опубликовано 20 июня, 2013 Ребят, может кто сталкивался с подобной ошибкой, в С++ я никчемный. Вообщем ситуация - люди входят на сервер, логин сервер проходят нормально при выборе сервера из списка через раз пускает рандомно, если не пускает то окно тупо висеть остается Ошибка (в ГС) : [12:19:58] INFO client 127.0.0.1 protected. [12:19:58] INFO client HWID18A49018E64C normal default cr key [b@48b83f10 [12:19:58] ERROR Client: CONNECTED IP: 127.0.0.1 - Failed reading: [C] AuthLogin - Server Version: ${build.revision} java.nio.BufferUnderflowException at java.nio.Buffer.nextGetIndex(Unknown Source) at java.nio.HeapByteBuffer.getInt(Unknown Source) at westeros.commons.net.nio.ReceivablePacket.readD(ReceivablePacket.java :32) at westeros.gameserver.network.l2.c2s.AuthLogin.readImpl(AuthLogin.java: 32) at westeros.gameserver.network.l2.c2s.L2GameClientPacket.read(L2GameClie ntPacket.java:26) at westeros.commons.net.nio.impl.SelectorThread.parseClientPacket(Select orThread.java:410) at westeros.commons.net.nio.impl.SelectorThread.tryReadPacket2(SelectorT hread.java:354) at westeros.commons.net.nio.impl.SelectorThread.readPacket(SelectorThrea d.java:309) at westeros.commons.net.nio.impl.SelectorThread.run(SelectorThread.java: 182) Состав AuthLogin.readImpl: private int _sessionId; private int _data1; private int _data2; private int _data3; private int _data4; @Override protected void readImpl() { _sessionId = readD(); _data1 = readD(); _data2 = readD(); _data3 = readD(); _data4 = readD(); //(32 строка) } после часа работы вообще практически пускать перестает, 15 раз не пускает, 1 раз пускает, а может и вообще не пустить Вообще где копать подскажите, может кто сталкивался Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
guruw 34 Опубликовано 20 июня, 2013 а причем тут C++? ошибка явно в серверной части - ява ставь вот эту и не парься Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
WesteroS 132 Опубликовано 20 июня, 2013 (изменено) в смысле не парься? мне только защита нужна, не больше здесь ошибка - мусор от клиента, если кто сталкивался может помогут Изменено 20 июня, 2013 пользователем WesteroS Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 20 июня, 2013 Полный код AuthLogin в студию. _data4 = readD(); //(32 строка) для считывания строк у нас readS Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
WesteroS 132 Опубликовано 20 июня, 2013 package westeros.gameserver.network.l2.c2s; import westeros.gameserver.Shutdown; import westeros.gameserver.network.authcomm.AuthServerCommunication; import westeros.gameserver.network.authcomm.SessionKey; import westeros.gameserver.network.authcomm.gspackets.PlayerAuthRequest; import westeros.gameserver.network.l2.GameClient; import westeros.gameserver.network.l2.s2c.LoginFail; import westeros.gameserver.network.l2.s2c.ServerClose; /** * cSddddd * cSdddddQ * loginName + keys must match what the loginserver used. */ public class AuthLogin extends L2GameClientPacket { private String _loginName; private int _playKey1; private int _playKey2; private int _loginKey1; private int _loginKey2; private byte[] _data = new byte[48]; @Override protected void readImpl() { _loginName = readS(32).toLowerCase(); _playKey2 = readD(); _playKey1 = readD(); _loginKey1 = readD(); _loginKey2 = readD(); } @Override protected void runImpl() { GameClient client = getClient(); SessionKey key = new SessionKey(_loginKey1, _loginKey2, _playKey1, _playKey2); client.setSessionId(key); client.setLoginName(_loginName); if(Shutdown.getInstance().getMode() != Shutdown.NONE && Shutdown.getInstance().getSeconds() <= 15) client.closeNow(false); else { if(AuthServerCommunication.getInstance().isShutdown()) { client.close(new LoginFail(LoginFail.SYSTEM_ERROR_LOGIN_LATER)); return; } GameClient oldClient = AuthServerCommunication.getInstance().addWaitingClient(client); if(oldClient != null) oldClient.close(ServerClose.STATIC); AuthServerCommunication.getInstance().sendPacket(new PlayerAuthRequest(client)); } } } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 20 июня, 2013 А вообще суть проблемы в том, что он пытается прочитать из буффера 4 байта под int но достигает лимита буффера. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 20 июня, 2013 Тут надо уже дебагером смотреть З.Ы. Это в каких хрониках логин 32 символа? всегда 16 был вроде. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
WesteroS 132 Опубликовано 20 июня, 2013 Иногда вот так бывает, при логине попытке неудачной: [13:57:40] INFO client 127.0.0.1 protected. [13:57:40] INFO client HWID18A49018E64C normal default cr key [b@3f543e84[13:57:40] INFO | xxxфФ▒тЯ╜ьйЮшЩв>x | 1 8A49018E64C | 127.0.0.1 | 2 | удачная попытка: [13:57:34] INFO client 127.0.0.1 protected. [13:57:34] INFO client HWID18A49018E64C normal default cr key [b@3bcd45d9[13:57:34] INFO | xxx123xxx | 18A49018E 64C | 127.0.0.1 | 2 | 32 потому что шифрация Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
WesteroS 132 Опубликовано 20 июня, 2013 то есть лонг попробовать вместо инт что ли? не пойму Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 20 июня, 2013 то есть лонг попробовать вместо инт что ли? не пойму Ничего не поменяется, long так же 4 байта. Там надо смотреть начинку буффера дебагером. З.Ы. private byte[] _data = new byte[48]; У тебя при каждом создании нового объекта класса создается неиспользуемый объект весом 48 байт. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
WesteroS 132 Опубликовано 20 июня, 2013 и отсюда возможно переполнение буфера, сейчас попробую, отпишусь Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 20 июня, 2013 и отсюда возможно переполнение буфера, сейчас попробую, отпишусь это тут не при чем, с буффера считываются данные лишь в рабочие переменные. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
WesteroS 132 Опубликовано 20 июня, 2013 ладно, есть идеи, или может какие другие фалы выложить? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
WesteroS 132 Опубликовано 20 июня, 2013 что в дебаг прописать, какие параметры? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 20 июня, 2013 что в дебаг прописать, какие параметры? Я бы использовал remote debug из IDEA. Там все просто как два пальца. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
WesteroS 132 Опубликовано 20 июня, 2013 есть ссылка на мануал? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 20 июня, 2013 есть ссылка на мануал? IDEA стоит у тебя? Могу по teamviewer показать основы Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
WesteroS 132 Опубликовано 20 июня, 2013 конечно стоит Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты