|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Задача сделать сервер с авторизацией. На сервер поступает запрос открытия сессии. Открываем. В этой сессии приходят логин и пароль. Проверяем и при совпадении с имеющимися в базе логина и пароля, привязываем к массиву данных, закрепленными за этими атрибутами входа. Ставим на форме winsock1 с индексом 0 в теле программы пишем Код: vbnet 1. 2. 3. 4. 5.
вот прописали, теперь у нас может быть открыто куча сессий, но как их привязать к приему??? Допустим у нас зарегестрировано 3 пользователя с логином и паролем соответственно: Пользователь1..3, Пароль1..3 у каждого пользователя свой массив данных на сервере, допустим list1.list(0..2) соответственно. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
Модератор: Учимся использовать тэги оформления кода - FAQ ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 20:29 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
я пока до одного способа додумался, но громоздкий в кубе сессия 1 = winsock1(1) сессия 2 = winsock1(2) сессия 3 = winsock1(3) winsock1(1).getdata = priem1 (пришло Пользователь2/Пароль2) if priem1 = Пользователь1/Пароль1 then привязываем к list1.list и winsock1(1) if priem1 = Пользователь2/Пароль2 then привязываем к list2.list и winsock1(1) ......... if priem1 = Пользователь500/Пароль500 then привязываем к list500.list и winsock1(1) winsock1(2).getdata = priem2 (пришло Пользователь1/Пароль1) if priem2 = Пользователь1/Пароль1 then привязываем к list1.list и winsock1(2) if priem2 = Пользователь2/Пароль2 then привязываем к list2.list и winsock1(2) ......... if priem2 = Пользователь500/Пароль500 then привязываем к list500.list и winsock1(2) . . winsock1(500).getdata = priem500 (пришло Пользователь67/Пароль67) иначе никак??? только циклами сократить? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 20:56 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
допустим у меня есть лист на 500 строк, в каждой строке атрибуты входа: Пользователь1/Пароль1 Пользователь2/Пароль2 .. Пользователь500/Пароль500 как сравнить winsock1(1) priem1 с этим листом на предмет совпадения и выдать строку которая совпала? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 21:01 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Ghepardсвой массив данных на сервереGhepardдопустим у меня есть листдавайте определимся, где хранятся данные и вообще какая среда разработки ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 21:06 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
vb6, данные логин и пароль хранятся на сервере в list1, каждая строка это логин и пароль одного сервера, клинт присылает строку типа *вася45/dfgsdge#всякие данные^ ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 22:43 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
кнопки редактировать ненашел)) vb6, данные логин и пароль хранятся на сервере в list1, каждая строка это логин и пароль одного пользователя*, клиент присылает строку типа *вася45/dfgsdge#всякие данные^ ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 22:45 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Что такое list1? Контрол ListBox? Контрол ListView? Или может какой-то класс? Если желаете получить качественный ответ, не жалейте букв на качественный вопрос. Я, было, сначала подумал, что пароли хранятся на листе экселя. Как данные туда попадают - из какого источника? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 22:53 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
да ListBox, данные переодически подгружаются из обычного текстового файла ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 23:06 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
кстати было бы неплохо подгружать их из экселя, но это я еще не умею, наверное не всё так просто) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 23:07 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
А зачем они подгружаются в LisBox? В этом есть какой-то сакральный смысл? Для проверки логина-пароля придется делать полный перебор элементов в цикле. Лучше тогда уж подгружать в коллекцию или словарь, там, по крайней мере, его можно быстро проверить. А по-хорошему все это должно храниться не в текстовом файле, а в файле БД, и непосредственно в нем же проверяться с помощью простого SQL-запроса. (вопросы хэширования пароля пока опустим...) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 23:28 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
автор'но как определить к какой сессии какой "ДатаАрривал-getdata" относится, что бы им отослать данные?winsosk1( Index ).getdata ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 23:43 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
понятно, что по хорошему это всё нужно делать так как Вы сказали, но у меня для этого нет багажа знаний, если по шагам подскажите буду только рад, а с нуля это всё перелопатить наверное неделя у меня уйдет если не больше. косательно winsock(index) getdata, можно поподробней? как правильно: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
или Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 00:07 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
в крации итого уже назрел вопрос как это всё хотя бы в циклы компактненько засунуть 1. создали много сессий (рекуест) где сессия 1 завязана с winsock1(1), 2 c winsock1(2) и т.д. 2. в датаарривале обрабатываем "входящий в данный момент" winsock1(x) на предмет поиска строки в листе в которой идентичное значение getdate что-то типа Код: vbnet 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 00:15 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
в идеале бы конечно проверять логин и пароль ещё в рекуесте, но winsock уж так сделан, что это невозможно, если бы знать его внутренность да переделать его, но это уже для меня слишком сложно ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 00:32 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Ghepardа с нуля это всё перелопатить наверное неделя у меня уйдет если не больше.То есть вы хотите написать игровой сервер на сокетах, обладая нулевыми знаниями? Оригинально. Так же оригинально, как загружать списки данных в ListBox для хранения. Естественно уйдет неделя или больше. Надо просто взять учебник и прочитать его. Я же не буду писать учебник прямо в вашем топике. Я подсказываю направления, куда копать, а копать - вам самому. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 00:54 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
лист бокс для наглядности мониторинга происходящего))) с учебником запара, тонну воды мне не очень хочется перечитывать, а по запросу как привязать аксцес к вб и ещё в нем скюэль запросами из вне трынькать, в яндексе я думаю океан на меня ерунды выльется, так ша пока обойдемся текстовым файлом. про перебор понятно, знач моя догадка не беспочвенна была, теперь хотя это красиво оформить и наконец разобраться с этими "index" есть ли смысл их мучать или проще свои юзать. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 03:36 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Вопрос на засыпку: 1. В vb случайные числа генерируются не совсем случайно, т.е. если выключить и включить проект, он будет выдавать ту же последовательность случайных чисел. например rnd(1): 0,7055475 0,533424 0,5795186, после перезапуска проекта rnd(1): rnd(1): 0,7055475 0,533424 0,5795186, то есть то же самое. Предпологаю что идентивикатор requestID в Код: vbnet 1. 2. 3.
также после перезапуска сервера, начнет гнать те же номера. Теперь ситуация. Учитывая, что дисконнект можно отследить только если отправить данные, то при неактивном простое клиента и сервера дисконнект не всплывет. Итак winsock1(1) сервера открыл сессию с клиентом допустим №1. Пятиминутный простой, пересылки данных нет. Сервер в течении этого времени решили перезапустить. Клиент №1 по прежнему молчит. За то клиент №2 приконектился первым, соответственно сервер ему открыл сессию winsock1(1), с тем же requestID что и до перезапуска. Второй клиент авторизовался отправив логин и пароль, на сервере присвоился к доступ к данным для клиента 2. Опять простой сети, данные не шлют друг другу и вдруг у клиента №2 обрывается интернет, но на сервере сессия по прежнему висит. Тут клиент №1 решил что-нибудь послать на сервер, но т.к. процесс авторизации он прошел, то для облегчения обмена данных ранее было принято решение слать логин и пароль только при запуске клиента. Итак сессия идентичная для клиента №1 по прежнему висит на сервере, но она привяза уже к данным пользователя 2, сооответственно теперь клиент №1 безприпятственно работает с данными на сервере для клиентa №2. Если всё описанное выше мной правильно, значит, нет выбора и надо в кадой пересылке данных слать логин и пароль чтобы не было таких нахлестов? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 10:15 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
вдогонку: рекуест наверное используется 1 раз и потом как таковой "не используется" в трафике, а только для поиска внутри системы как идентификатор? Тогда открытая сессия наверное хранит ip адрес, поэтому получится еще веселей, второй клиент будет отсылать данные на сервер, а сервер после обработки будет отсылать данные второму, но первый тоже будет посылать в эту сессию и а второй уже получать результат от сервера)? Если опять всё правильно, то если с одного ip запустить 2 клиента, тоже будет котовасия? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 10:39 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Ghepard1. В vb случайные числа генерируются не совсем случайно, т.е. если выключить и включить проект, он будет выдавать ту же последовательность случайных чисел.То есть не то, что учебник, а даже справку по rnd открыть не хватает времени? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 12:23 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
причём тут rnd? в форм лоад для рекуеста тоже рандомайз пишут? хва цеплятся, по делу расскажи ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 12:55 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
По делу я уже говорил, ты игнорируешь. По случайным числам - используй Randomize и будут тебе случайные числа. Не хочешь помощи - не надо, делай сам. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 13:00 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
вот написал, подскажите где можно улучшить или может ошибки подводные где есть? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 13:18 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
(По делу я уже говорил, ты игнорируешь. По случайным числам - используй Randomize и будут тебе случайные числа. Не хочешь помощи - не надо, делай сам.) МНЕ СЛУЧАЙНЫЕ ЧИСЛА НЕ НУЖНЫ!!!!!!!!!!! я спросил как работает рекуест в винсоксе, криво как рнд или там рэндом нормальный и каждый раз другие числа для подверждения открытия сессии. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 13:19 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Как именно идентифицируется TCP-сессия в винсоке - это тебя не должно волновать, это не твой уровень абстракции: To write client or server applications you do not need to understand the details of TCP or to call low level Winsock APIs. Если сомневаешься, проведи эксперимент. Перезапуск приложения приведет к обрыву сессий, естественно. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 13:33 |
|
|
start [/forum/topic.php?fid=60&msg=38484145&tid=2156648]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 286ms |
total: | 431ms |
0 / 0 |