Socket
Всем доброго времени!:)
Пожалуйста знатоки подскажите. Порт 2106 закрыт. После запуска Login server'a он его открывает. Я никак не могу понять, "Игровой клиент", он отправляет данные на открытый сокет Login-server'a ? Или, что там происходит, мне очень хочется это знать. Пожалуйста объясните... Как там происходит взаимодействие клиент с login-server'om. И для чего еще один порт 9014? И еще пожалуйста, кто-нибудь скажите где в коде происходит обработка кнопки "Войти"? Прошу помогите пожалуйста! Будьте так сказачна любезны ;) |
Re: Socket
реакция на кнопку пойти - обрабатывается в логине, пакет - RequestAuthLogin
порт 9014 используется для связи login<->server |
Re: Socket
Цитата:
Само нажатие ивента так и не увидел, или там не так?) Объясните как, вообще запутался. Там столько кода и файлов, это же вообще жесть. Взял чисто случайно сборку с исходами l2jfrozen. Кто писал сервер себя не жалел видимо... А других темболее. У меня главная проблема, это вот эта, все остальное нет проблем. Разобрался. А вот с этими соединениями никак не могу понять. Прошу можешь поподробнее объяснить!?:) |
Re: Socket
Объяснить могу попробовать йа. Значится, сетевой обмен "клиент-сервер" выглядит примерно следующим образом (в общих чертах, конечно)...
Со стороны клиента: Посылка какого-либо запроса - это почти всегда реакция на какое либо действие пользователя. В общем случае, при нажатии на что-либо, клиент формирует пакет, привязанный к этому "что-либо", заполняя его поля значениями в определенном порядке (это, например, имя аккаунта и хеш от пароля для реквестАутЛогин), шифрует и кидает "на шину". Естественно, при таком раскладе, никаких эвентов нажатий (боже мой, делфи, что ли?) вы не найдете, поскольку исходников клиентской части у вас банально нет. Зато у вас имеются исходники серверной части. И вот тут уже всё несколько более прозрачно. Обычно джава-сервера используют "либу" mmocore, которая предоставляет набор базовых сетевых функций, в каком-то роде "заточенных" под многопользовательскую платформу... Затем к этой либе аттачится криптомодуль, который по получении пакета расшифровывает содержимое и отправляет на обработку. Дальше происходит совсем уж примитивная вещь - большой такой, допустим, оператор выбора по значению первого байта полезной нагрузки пакета... Благодаря этому первому байту, происходит осознание того, что делать со всеми остальными байтами, и какая у них смысловая нагрузка. Соответственно, когда мы понимаем, какой пакет к нам пришел, мы дергаем соответствующую функцию-обработчик, которая (как правило) и обеспечивает нам реакцию на событие - то есть отсылку данных клиенту. Клиент в свою очередь делает нечто похожее. И так далее. И поскольку у вас есть исходники, реакцию на событие со стороны сервера можно модифицировать... А можно не модифицировать, и оставить "как есть", до обретения просветления в этой области. Помимо этого, сервер может отправлять клиенту данные не благодаря запросам от оного, но благодаря реализованным алгоритмам... (такие вещи, как запуск анимации заклинания, например, другими персонажами). Надеюсь, изложил более-менее понятно, хотя старался как можно короче, и поэтому многое (например, как именно происходит идентификация клиента) я просто опустил "для ясности" :) |
Re: Socket
В том, то все и дело, я не пойму, что там куда отправляется и где, что принимается...
Вообще не врубэйшен. Можешь помочь разобраться!? Ну пробую представить: Я жму вход, что там формируется, пакет? Мне бы понять бы как вот это устроенно, все все вопросы бы сразу отпали... У меня в этом только сложность, я не пойму как там устроенна связь, а очень нужно... Помогите! Кто, чем сможет, может быть детально информация есть?! Я не прошу за меня все писать коды и т.д., мне нужно, чтобы я хотябы понял что писать. Конкретно хочу понять как работает. Мне только это и нужно.... Большое спасибо, что помогаете. Прошу постарайтесь разжевать и если можно показать, примером, будет вообще супер. Благодарю, за все, очень сильно помогаете. |
Re: Socket
После нажатия кнопки войти - клиент устанавливает соединение с логин сервером. После того, как соединение установлено - начинается обмен пакетами.
Первый пакет отсылает логин сервер, Это пакет LoginInit(0x00), в котором отсылается открытый RSA ключ, blowFish ключ, и так называемый идентификатор сессии(sessionId). Клиент в ответ на этот пакет присылает пакет AuthGameGuard, в котором возвращает sessionId. Если он совпадает с отосланым, сервер отсылает пакет GGAuth, в ответ на который клиент присылает RequestAuthLogin, который содержит в себе логин и пароль игрока, зашифрованные с помощью отосланного ранее открытого RSA ключа. Ещё раз кратко: (C)lient: -> (L)oginserver: Запрос на подключение Логин сервер устанавливает соединение... L -> C: LoginInit C -> L: AuthGameGuard L -> C: GGAuth C -> L: RequestAuthLogin |
Re: Socket
Ох-хо... Обычно, если люди хотят понять, как работает "вообще сеть", я рекомендую какой-нить ваершарк. Сниффер такой.
А в случае с линеечкой, думаю, более чем идеально подойдет l2ph. Его можно скачать, поставить, запустить, и с его помощью наглядно собственными глазами увидеть, "пошчупать", что, куда, когда и даже "зачем" посылается. А читать курс о сетях, сетевых протоколах, конкретном протоколе конкретной игры и разработке софта с реалиацией оного протокола, а также о языках программирования высокого уровня вообще, джаве в частности и ОО-подходе к разработке у меня банально нет ни времени, ни желания, уж не обессудьте. |
Re: Socket
Цитата:
О как уже начинаю, понимать! Большущее, спасибо... Gubble, я все конечно понимаю, но если нет желания, то конечно я не настаиваю. Думаю, возможно найдутся, те, у кого будет хоть, немного желания... Я просто никогда не задавался таким вопросом, а теперь мне это понадобилось и я пытаюсь получить как можно больше точной информации... Camelion, Большое спасибо за подсказку.... LoginInit... А вот его я что-то не увидел, GGAuth такой класс имеется. RSA - откуда берется? blowFish, а это?) |
Re: Socket
Попробуйте вместо LoginInit поискать просто Init.
RSA и BlowFish ключи генерируются в нужные моменты. У меня этим занимается вот такой класс: PHP код:
|
Re: Socket
Camelion, ну хоть теперь уже становится более наглядно и понятно...
Спасибо, что помогаешь... Там такой ужас, что вообще =) Разветвлений там просто даталова много... Понапичкано, там наверное можно сидеть, щелкать, щелкать, щелкать и конца не увидешь... Куда столько... Init класс нашел: Что-то там все так запутанно, что просто дурдом какой-то. Толи, специально, толи, что не пойму, куда столько классов и методов. Есть по легче сборка с открытыми исходами? Еще так пишут пахабно... Вот, что то тут тоже видимо. PHP код:
Серьезно, есть ли полегче сборки? |
Текущее время: 19:22. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot