powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Игровой сервер winsosk
63 сообщений из 63, показаны все 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
Игровой сервер winsosk
    #38484399
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сохранялась при перезапуске сервера? Да ну!
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484491
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, при вытаскивании кабеля, а ты наверное имел ввиду если на одной стороне корректно потушить, то на обоих сторонах закроется, возможно, но если соединения по кабелю нет, то на включенном не закроется, так как команда не поступала.
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484496
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причем тут кабель вообще? При вытаскивании кабеля соединение может закрыться, а может не закрыться, все зависит от настройки сетей между сервером и клиентом (туннели, роутеры, NAT-ы и т.п.)

Тебе что нужно? Чтобы другой клиент не подключился к тому же соединению. Этого не произойдет.
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484499
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghepardно если соединения по кабелю нет, то на включенном не закроется, так как команда не поступала.слышал такой термин - таймаут?
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484540
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
слышал, если он и заложен то очень большой и вообще я тут не спорить пришел, на вопрос выше лучше ответь, например как цикл фор нормально написать, может лучше ваил, искать пока не найти, а не до конца, пока не нашел ещё в инэте
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484541
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я расписал ситуацию когда это может произойти (предположение) обоснуй почему нет если уверен на 100%
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484548
Клевер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro ,
реал обоснуй чувак-то понатри четкий пацан за слова отвечает
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484555
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
беловуКлеверShocker.Pro , реал обоснуй чувак-то понатри четкий пацан за слова отвечает
Ghepardя расписал ситуацию когда это может произойти (предположение) а у меня есть предположение, что автор топика с тремя ногами и двумя головами, обоснуйте, почему это не так?

Если ему так хочется, пусть изучает работы стека TCP/IP, вместо того, чтобы писать свое приложение. Ему, правда, и учебник почитать лень... но это не мои проблемы
Ghepardнапример как цикл фор нормально написатьАнглийскими буквами - For.
Что значит "нормально", что тебя не устраивает?
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484561
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, цикл не останавливает когда уже нашел решение, а лопатит до конца
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484566
Клевер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghepardцикл не останавливает когда уже нашел решение, а лопатит до конца
Код: vbnet
1.
exit for

я в своё время брался за работу с винсоком, но ничего толкового из этого не вышло. какой-то глюкнутый корявый компонент. если что-то работающее выйдет - выложи
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484574
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghepardцикл не останавливает когда уже нашел решение, а лопатит до концато есть зайти в хелп и во первЫх строках его увидеть оператор Exit For опять же не наш метод? Ну понятно.

Хорошо, вот помощник тебе нашелся )
Люди, считающие ниже своего достоинства читать хелп и учебники должны, конечно же, помогать друг другу
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484578
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, конечно же должны
или ещё GoTo ExitFor
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484588
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так?

Код: vbnet
1.
2.
3.
4.
5.
6.
For i = 0 To 10000
If Log_Pass.List(i) = priem(Index) Then
    usernum = i
    Exit For
End If
Next i



может есть более быстрый алгоритм поиска?
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484612
Клевер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghepardможет есть более быстрый алгоритм поиска?можешь организовать нечто подобное детсадовской задаче про монетки, т.е.
сначала сортируешь лог_пасы в листе(по алфавиту, к примеру).
затем проверяешь первую букву лог_паса в строке 500. затем в строке 250, либо 750, в зависимости от проверки. (потом в 125й, 375й, 625й или 875й и тд.) но всё это геморно. займёшься этим, когда создашь более менее рабочую прогу
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484619
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghepardможет есть более быстрый алгоритм поиска?конечно. Об этом я писал еще на первой странице.
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484634
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не могу найти есть ли у listbox аналог textbox - change?
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484643
Клевер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghepardне могу найти есть ли у listbox аналог textbox - change?зачем? в лист бокс ты вносишь данные программно. программно же и вызывай необходимые тебе функции после добавления\удаления записей.
выложи код клиента и сервера, передающих данные через винсок. давно хотел увидеть хоть 1 работающий пример
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484651
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Клевер, это отдельный листбокс по таймеру, чтоб арривал не захламлять, пока еще не готово, скоро положу.
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484685
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот исходник, пока только недочат, но уже работает норм, сервер на мой ip прописан, запущу, мож кто подконектится потестим
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484698
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в клиенте забыл list.enabled =true поставить, скрол заблочен)))
как сделать, чтобы автоматически последнее сообщение было на виду?
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484711
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а чего не отвечаешь?
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484742
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да я переодически поглядываю отвечаю
а кто ддос проверял, тупил сервак, как защитится? и что будет когда integer или long кончится, упадёт сервак?)
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484753
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я проверял. Не ДДОС, а ДОС.
Тупил он не из-за цикла For, я делал только подключение-отключение к винсоку в цикле.
Защищаться от такого надо на сетевом уровне, если есть смысл.
Упадет, когда кончится Integer, но может упасть и раньше, если ресурсы кончатся. Просто надо сделать максимум при создании экземпляров Винсоков на форме, например 300.
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484854
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
убрал строчку
Код: vbnet
1.
Load Winsock1(NumSockets)

и создал на форме контролов winsock1(1..1000) так? честно говоря не совсем понимаю чем это добавит стабильности, просвяти пожалста.
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484882
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
обновил клиент, пока только интерфейс, winsock еще не дублировал на форме.
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484889
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghepardубрал строчку
Код: vbnet
1.
Load Winsock1(NumSockets)


и создал на форме контролов winsock1(1..1000) так? честно говоря не совсем понимаю чем это добавит стабильности, просвяти пожалста.а зачем? надо было просто ограничить загрузку очередного винсока при превышении ограничения
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484907
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, дык ошибка сразу, у меня же уже на форме будет 300 винсоков загружены если их на форме разместить
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484911
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а я не правильно тебя понял, не проснулся еще тогда)
дело в том что винсоксы рано или поздно все равно кончатся, т.к. они создаются при коннекте, если играть человек 500 будет да ещё и досить, то лонг и за день кончится, а без новых винсоков никак, только если старые задействовать, но я не совсем себе представляю как это сделать, так что единственным решением я вижу что действительно когда будет приближаться к лонг, то автоматом тушить и запускать сервер.
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484913
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
какой порт лучше всего использовать для сервера? в исходнике 85, с приятелем тестили у него ошибку выдавало на клиенте, поставили 1001, заработало...
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484922
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как вариант:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
If NumSockets = 10 Then NumSockets = 0

NumSockets = NumSockets + 1
  
For s = 1 To NumSockets  
    If Winsock1(NumSockets) <> 7 Then
        Winsock1(NumSockets).Close
        Winsock1(NumSockets).Accept requestID
Exit For
    End If
Next i



но вроде Winsock1(NumSockets).Close не моментален
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38484933
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
обалдеть, работает....

If NumSockets = 10 Then NumSockets = 0
NumSockets = NumSockets + 1
For s = 1 To NumSockets '11 winsock1(0..10) на форме
If Winsock1(NumSockets).State <> 7 Then
Winsock1(NumSockets).Close
Winsock1(NumSockets).Accept requestID
Exit For
End If
Next s
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38485218
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghepard,

В данной теме VB.NET Winsock многопоточный сервер я ранее писал про свой маленький веб-сервер. Он загружает 100 винсоков в коллекцию. И при необходимости, когда появился реквест выделяет свободный и отдаёт на подключение. Когда сокет закрывается, используемый винсок снова возвращается в коллекцию. Итого достаточно стабильно работало всё.
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38485768
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghepardкакой порт лучше всего использовать для сервера? в исходнике 85, с приятелем тестили у него ошибку выдавало на клиенте, поставили 1001, заработало...Порты до 1024 считаются зарезервированными для разных сетевых служб.

Вот список зарегистрированных портов, которые точно не стоит использовать: тынц .
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38487201
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Load Winsock1(NumSockets) не убирай! Совсем не сложно помечать переменной(масив) as boolean о состоянии Socket (используется или не используется). Если по количеству сокетов мало, тогда используй Load, иначе используй закрытые сокеты (отработанные). Порт можно слушать один и тот же даже если используется много подключений. Использование коллекции почти равноценно работает как SET, но только это массив. Были случаи когда нужно было применять =nothing, так как работает связывание (таблицы баз данных пробовал в коллекцию заганять - работает). Для удобной работы можно пользоваться классами. Скорость чуть снижается, но без них не комфортно программировать. TCP порт - гарантирует доставку, но на клиенте он уже отправил данные, а сервер мог еще не принять, хотя клиент говорит 100% все выгрузил. Там как-то на уровне буферизации происходит - с опозданием. Для Game Server как раз не очень и подходит, ну только если игра стратегическая (на большое время). Пробовал атаковать на один порт параллельными потоками одновременно. 8 соединений и одновременных скачок поддерживает без проблем, но нужно ставить задержку (я использовал таймер в 10мс) на отправку данных - НЕ ЦЫКЛ!, так как была практика и цикл со временем вызовет ошибку с неизвестным характером (что-то о Memory). Если использовать цыкл, то наблюдается увеличение памяти самой программы (можно посмотреть в диспетчере), и работает при этом в десятки медленней. Когда объем достигает какого-то предела по всей видимости и выскакивает эта ошибка. Но с таймерами все спокойно. Единственное, что на протяжении дня все работает, а на протяжении недели замечал другие баги, которые не могу отследить. У меня иногда не используются закрытые порты и срабатывает Load для нового Winsock. Но это уже моя ошибка. Что-то недоглядел.
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38487224
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159Андрей159, привет. Тебе же уже советовали купить клавиатуру с энтером

Ну серьезно, тяжеловато читать такой "кирпич"
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38487334
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Сори. И спешил и хотел сжато все изложить что знаю. Как-никак раньше сам наивно спрашивал, а теперь зубы проел с сокетом.

Пора переходить на видеоблоги) тока с русским у меня не очень (я из Украины). Разговариваю нормально, но могут ржать от одного неверно сказанного слова. Да и на сколько меня хватит. до 15 видеосюжетов бы снял, а дальше бы просто исчерпался.

Часто не понимаю откуда у вас столько времени, чтобы всегда отвечать и просто жить на сайте. У меня просто дома ремонт делают. Меня все бесит, не могу ничего делать. Та и думаю почитаю, отвечу где что знакомо. Даже на работе начальство позволяет делать что хочу, а свободного времени полно, но интересней всегда что-то создавать, делать, а вот читать/отвечать на это нет времени.
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38492510
Ghepard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей159, разбор полетов.

Load Winsock1(NumSockets) не убирай!
#Winsock1(NumSockets).Close# - Это?

Совсем не сложно помечать переменной(масив) as boolean о состоянии Socket (используется или не используется). Если по количеству сокетов мало, тогда используй Load, иначе используй закрытые сокеты (отработанные).
#Сокет = Сессия?# В моем понятии у каждого псевдо winsock1(индексового) может быть только одна сессия. А если на форме разместить 2 отдельных самостоятельных winsock то они не смогут совместно юзать один порт! Чем не устраивает Winsock.state??? 7 сессия открыта, 0 сесиия закрыта, остальные значения, занято и тип.того.

Порт можно слушать один и тот же даже если используется много подключений.
#Слушать да, но это не реалтайм, приходит запрос на создание сессии, подгружается, если ещё не загружен индексовый очередной winsock и берет на себя управление, и только после этого продолжается прослушка, это очень быстро происходит, но одновременно 2 запроса не могут быть обработаны на одном порту.#

Если я в чем то заблуждаюсь здесь, то далее по тексту советы просто не пойму, вроде бы уже всё сделал всё работает, клозить полюбому надо.

В общем ключ сокет это сессия или нет)))

В чем совет заключается не могу понять)))
...
Рейтинг: 0 / 0
Игровой сервер winsosk
    #38494871
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Ghepard:
"А если на форме разместить 2 отдельных самостоятельных winsock то они не смогут совместно юзать один порт!"
- Слушать одновременно не получиться, но я предлогаю (у меня так работает) слушать порт и в случае подключения вновь слушать этот порт следующим свободным сокетом.
"но одновременно 2 запроса не могут быть обработаны на одном порту"
Могут. Разберемся только о чем кто думает.
- Слушать порт №nn можно только чем-то одним
- Делая процедуру подключения к порту, выделяется уникальный ID код по которому потом будет происходить общение, а порт №nn освобождается
- Этот порт №nn можно другим сокетом слушать, что делает приложение многопользовательским или многопотоковым
- С каждым соединением программа справится (нет такого понятия как одновременно, не вовремя включили прослушку), поскольку информацию мы снимаем с буфера, принимаем и отправляем в буфер, так как tcp протокол этот протокол с гарантией приема/доставки и как он работает на уровне ассемблера не известно, главное работает.
...
Рейтинг: 0 / 0
63 сообщений из 63, показаны все 3 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Игровой сервер winsosk
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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