powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Игровой сервер winsosk
25 сообщений из 63, страница 1 из 3
Игровой сервер winsosk
    #38484076
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача сделать сервер с авторизацией.

На сервер поступает запрос открытия сессии. Открываем. В этой сессии приходят логин и пароль. Проверяем и при совпадении с имеющимися в базе логина и пароля, привязываем к массиву данных, закрепленными за этими атрибутами входа.

Ставим на форме winsock1 с индексом 0
в теле программы пишем

Код: vbnet
1.
2.
3.
4.
5.
Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
    NumSockets = NumSockets + 1
    Load Winsock1(NumSockets)
    Winsock1(NumSockets).Accept requestID
End Sub



вот прописали, теперь у нас может быть открыто куча сессий, но как их привязать к приему???

Допустим у нас зарегестрировано 3 пользователя с логином и паролем соответственно: Пользователь1..3, Пароль1..3
у каждого пользователя свой массив данных на сервере, допустим list1.list(0..2) соответственно.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
dim priem1..3 as string
winsosk1(?????).getdata priem1
winsosk1(????).getdata priem2
winsosk1(???).getdata priem3
'открыли сессию Пользователь2 и Пользователь3, прислали свои логины и пароли сюда,
'но как определить к какой сессии какой "ДатаАрривал-getdata" относится, что бы им отослать данные?
'Логин и пароль то к листу не проблема привязать, а вот в какую сесиию это отправлять?
End Sub


Модератор: Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484092
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я пока до одного способа додумался, но громоздкий в кубе
сессия 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)

иначе никак??? только циклами сократить?
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484099
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
допустим у меня есть лист на 500 строк, в каждой строке атрибуты входа:
Пользователь1/Пароль1
Пользователь2/Пароль2
..
Пользователь500/Пароль500

как сравнить winsock1(1) priem1 с этим листом на предмет совпадения и выдать строку которая совпала?
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484102
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghepardсвой массив данных на сервереGhepardдопустим у меня есть листдавайте определимся, где хранятся данные и вообще какая среда разработки
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484139
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vb6, данные логин и пароль хранятся на сервере в list1, каждая строка это логин и пароль одного сервера, клинт присылает строку типа *вася45/dfgsdge#всякие данные^
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484140
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кнопки редактировать ненашел))
vb6, данные логин и пароль хранятся на сервере в list1, каждая строка это логин и пароль одного пользователя*, клиент присылает строку типа *вася45/dfgsdge#всякие данные^
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484145
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое list1? Контрол ListBox? Контрол ListView? Или может какой-то класс? Если желаете получить качественный ответ, не жалейте букв на качественный вопрос. Я, было, сначала подумал, что пароли хранятся на листе экселя.

Как данные туда попадают - из какого источника?
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484157
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да ListBox, данные переодически подгружаются из обычного текстового файла
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484158
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кстати было бы неплохо подгружать их из экселя, но это я еще не умею, наверное не всё так просто)
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484171
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем они подгружаются в LisBox? В этом есть какой-то сакральный смысл?
Для проверки логина-пароля придется делать полный перебор элементов в цикле.
Лучше тогда уж подгружать в коллекцию или словарь, там, по крайней мере, его можно быстро проверить.
А по-хорошему все это должно храниться не в текстовом файле, а в файле БД, и непосредственно в нем же проверяться с помощью простого SQL-запроса.

(вопросы хэширования пароля пока опустим...)
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484179
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор'но как определить к какой сессии какой "ДатаАрривал-getdata" относится, что бы им отослать данные?winsosk1( Index ).getdata
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484192
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
понятно, что по хорошему это всё нужно делать так как Вы сказали, но у меня для этого нет багажа знаний, если по шагам подскажите буду только рад, а с нуля это всё перелопатить наверное неделя у меня уйдет если не больше.

косательно winsock(index) getdata, можно поподробней?

как правильно:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
dim ind as integer

Private Sub Winsock1_ConnectionRequest(index As Integer, ByVal requestID As Long)  
    ind = ind + 1
    Load Winsock1(ind)
    Winsock1(ind).Accept requestID
End Sub

Private Sub Winsock1_DataArrival(index As Integer, ByVal bytesTotal As Long)   
Winsock1(ind).GetData
End Sub



или

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub Winsock1_ConnectionRequest(index As Integer, ByVal requestID As Long)  
    Load Winsock1(index)
    Winsock1(index).Accept requestID
End Sub

Private Sub Winsock1_DataArrival(index As Integer, ByVal bytesTotal As Long)   
Winsock1(index).GetData
End Sub
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484198
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в крации итого уже назрел вопрос как это всё хотя бы в циклы компактненько засунуть




1. создали много сессий (рекуест) где сессия 1 завязана с winsock1(1), 2 c winsock1(2) и т.д.
2. в датаарривале обрабатываем "входящий в данный момент" winsock1(x) на предмет поиска строки в листе в которой идентичное значение getdate
что-то типа
Код: vbnet
1.
2.
3.
For i = 0 To 60
If List1.List(i) = Text1 Then Text2 = i
Next i
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484204
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в идеале бы конечно проверять логин и пароль ещё в рекуесте, но winsock уж так сделан, что это невозможно, если бы знать его внутренность да переделать его, но это уже для меня слишком сложно
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484211
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghepardа с нуля это всё перелопатить наверное неделя у меня уйдет если не больше.То есть вы хотите написать игровой сервер на сокетах, обладая нулевыми знаниями? Оригинально. Так же оригинально, как загружать списки данных в ListBox для хранения.

Естественно уйдет неделя или больше. Надо просто взять учебник и прочитать его. Я же не буду писать учебник прямо в вашем топике. Я подсказываю направления, куда копать, а копать - вам самому.
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484236
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
лист бокс для наглядности мониторинга происходящего))) с учебником запара, тонну воды мне не очень хочется перечитывать, а по запросу как привязать аксцес к вб и ещё в нем скюэль запросами из вне трынькать, в яндексе я думаю океан на меня ерунды выльется, так ша пока обойдемся текстовым файлом. про перебор понятно, знач моя догадка не беспочвенна была, теперь хотя это красиво оформить и наконец разобраться с этими "index" есть ли смысл их мучать или проще свои юзать.
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484285
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос на засыпку:
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.
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
.....
End Sub


также после перезапуска сервера, начнет гнать те же номера.

Теперь ситуация. Учитывая, что дисконнект можно отследить только если отправить данные, то при неактивном простое клиента и сервера дисконнект не всплывет. Итак winsock1(1) сервера открыл сессию с клиентом допустим №1. Пятиминутный простой, пересылки данных нет. Сервер в течении этого времени решили перезапустить. Клиент №1 по прежнему молчит. За то клиент №2 приконектился первым, соответственно сервер ему открыл сессию winsock1(1), с тем же requestID что и до перезапуска. Второй клиент авторизовался отправив логин и пароль, на сервере присвоился к доступ к данным для клиента 2. Опять простой сети, данные не шлют друг другу и вдруг у клиента №2 обрывается интернет, но на сервере сессия по прежнему висит. Тут клиент №1 решил что-нибудь послать на сервер, но т.к. процесс авторизации он прошел, то для облегчения обмена данных ранее было принято решение слать логин и пароль только при запуске клиента. Итак сессия идентичная для клиента №1 по прежнему висит на сервере, но она привяза уже к данным пользователя 2, сооответственно теперь клиент №1 безприпятственно работает с данными на сервере для клиентa №2. Если всё описанное выше мной правильно, значит, нет выбора и надо в кадой пересылке данных слать логин и пароль чтобы не было таких нахлестов?
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484297
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вдогонку:
рекуест наверное используется 1 раз и потом как таковой "не используется" в трафике, а только для поиска внутри системы как идентификатор? Тогда открытая сессия наверное хранит ip адрес, поэтому получится еще веселей, второй клиент будет отсылать данные на сервер, а сервер после обработки будет отсылать данные второму, но первый тоже будет посылать в эту сессию и а второй уже получать результат от сервера)? Если опять всё правильно, то если с одного ip запустить 2 клиента, тоже будет котовасия?
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484333
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghepard1. В vb случайные числа генерируются не совсем случайно, т.е. если выключить и включить проект, он будет выдавать ту же последовательность случайных чисел.То есть не то, что учебник, а даже справку по rnd открыть не хватает времени?
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484354
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
причём тут rnd? в форм лоад для рекуеста тоже рандомайз пишут? хва цеплятся, по делу расскажи
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484357
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По делу я уже говорил, ты игнорируешь.
По случайным числам - используй Randomize и будут тебе случайные числа.
Не хочешь помощи - не надо, делай сам.
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484369
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот написал, подскажите где можно улучшить или может ошибки подводные где есть?

Код: 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.
Dim NumSockets As Integer
Dim priem(10000) As String

Private Sub Command1_Click()
Log_Pass.Clear
Open "autoriz.txt" For Input As #1
Do Until EOF(1)
Line Input #1, numuser
Log_Pass.AddItem (numuser)
Loop
Close #1
End Sub

Private Sub Form_Load()
Winsock1(0).Listen
End Sub


Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
    NumSockets = NumSockets + 1
    Load Winsock1(NumSockets)
    Winsock1(NumSockets).Accept requestID
End Sub


Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Winsock1(Index).GetData priem(Index)
For i = 0 To 10000
If Log_Pass.List(i) = priem(Index) Then usernum = i
Next i
End Sub
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484370
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
(По делу я уже говорил, ты игнорируешь.
По случайным числам - используй Randomize и будут тебе случайные числа.
Не хочешь помощи - не надо, делай сам.)

МНЕ СЛУЧАЙНЫЕ ЧИСЛА НЕ НУЖНЫ!!!!!!!!!!! я спросил как работает рекуест в винсоксе, криво как рнд или там рэндом нормальный и каждый раз другие числа для подверждения открытия сессии.
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484376
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как именно идентифицируется TCP-сессия в винсоке - это тебя не должно волновать, это не твой уровень абстракции: To write client or server applications you do not need to understand the details of TCP or to call low level Winsock APIs. Если сомневаешься, проведи эксперимент. Перезапуск приложения приведет к обрыву сессий, естественно.
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484397
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сейчас нет железа провести эксперимент, а раньше выдергивал кабель, сессия сохранялась (при условии если данные не передаются, а то бы сразу ошибка была, висела долго, может даже бесконечно)
...
Рейтинг: 0 / 0
25 сообщений из 63, страница 1 из 3
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Игровой сервер winsosk
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]