|
Игровой сервер 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 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
сейчас нет железа провести эксперимент, а раньше выдергивал кабель, сессия сохранялась (при условии если данные не передаются, а то бы сразу ошибка была, висела долго, может даже бесконечно) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 13:53 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Сохранялась при перезапуске сервера? Да ну! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 13:57 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Shocker.Pro, при вытаскивании кабеля, а ты наверное имел ввиду если на одной стороне корректно потушить, то на обоих сторонах закроется, возможно, но если соединения по кабелю нет, то на включенном не закроется, так как команда не поступала. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 17:01 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Причем тут кабель вообще? При вытаскивании кабеля соединение может закрыться, а может не закрыться, все зависит от настройки сетей между сервером и клиентом (туннели, роутеры, NAT-ы и т.п.) Тебе что нужно? Чтобы другой клиент не подключился к тому же соединению. Этого не произойдет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 17:07 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Ghepardно если соединения по кабелю нет, то на включенном не закроется, так как команда не поступала.слышал такой термин - таймаут? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 17:10 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
слышал, если он и заложен то очень большой и вообще я тут не спорить пришел, на вопрос выше лучше ответь, например как цикл фор нормально написать, может лучше ваил, искать пока не найти, а не до конца, пока не нашел ещё в инэте ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 18:06 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
я расписал ситуацию когда это может произойти (предположение) обоснуй почему нет если уверен на 100% ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 18:08 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Shocker.Pro , реал обоснуй чувак-то понатри четкий пацан за слова отвечает ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 18:20 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
беловуКлеверShocker.Pro , реал обоснуй чувак-то понатри четкий пацан за слова отвечает Если ему так хочется, пусть изучает работы стека TCP/IP, вместо того, чтобы писать свое приложение. Ему, правда, и учебник почитать лень... но это не мои проблемы Ghepardнапример как цикл фор нормально написатьАнглийскими буквами - For. Что значит "нормально", что тебя не устраивает? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 18:37 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Shocker.Pro, цикл не останавливает когда уже нашел решение, а лопатит до конца ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 18:40 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Ghepardцикл не останавливает когда уже нашел решение, а лопатит до конца Код: vbnet 1.
я в своё время брался за работу с винсоком, но ничего толкового из этого не вышло. какой-то глюкнутый корявый компонент. если что-то работающее выйдет - выложи ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 18:44 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Ghepardцикл не останавливает когда уже нашел решение, а лопатит до концато есть зайти в хелп и во первЫх строках его увидеть оператор Exit For опять же не наш метод? Ну понятно. Хорошо, вот помощник тебе нашелся ) Люди, считающие ниже своего достоинства читать хелп и учебники должны, конечно же, помогать друг другу ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 18:51 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Shocker.Pro, конечно же должны или ещё GoTo ExitFor ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 18:58 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
так? Код: vbnet 1. 2. 3. 4. 5. 6.
может есть более быстрый алгоритм поиска? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 19:12 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Ghepardможет есть более быстрый алгоритм поиска?можешь организовать нечто подобное детсадовской задаче про монетки, т.е. сначала сортируешь лог_пасы в листе(по алфавиту, к примеру). затем проверяешь первую букву лог_паса в строке 500. затем в строке 250, либо 750, в зависимости от проверки. (потом в 125й, 375й, 625й или 875й и тд.) но всё это геморно. займёшься этим, когда создашь более менее рабочую прогу ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 19:48 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Ghepardможет есть более быстрый алгоритм поиска?конечно. Об этом я писал еще на первой странице. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 20:07 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
не могу найти есть ли у listbox аналог textbox - change? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 20:26 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Ghepardне могу найти есть ли у listbox аналог textbox - change?зачем? в лист бокс ты вносишь данные программно. программно же и вызывай необходимые тебе функции после добавления\удаления записей. выложи код клиента и сервера, передающих данные через винсок. давно хотел увидеть хоть 1 работающий пример ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 20:59 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Клевер, это отдельный листбокс по таймеру, чтоб арривал не захламлять, пока еще не готово, скоро положу. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 21:20 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
вот исходник, пока только недочат, но уже работает норм, сервер на мой ip прописан, запущу, мож кто подконектится потестим ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 22:33 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
в клиенте забыл list.enabled =true поставить, скрол заблочен))) как сделать, чтобы автоматически последнее сообщение было на виду? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 22:50 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
а чего не отвечаешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 23:02 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
да я переодически поглядываю отвечаю а кто ддос проверял, тупил сервак, как защитится? и что будет когда integer или long кончится, упадёт сервак?) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 23:37 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Я проверял. Не ДДОС, а ДОС. Тупил он не из-за цикла For, я делал только подключение-отключение к винсоку в цикле. Защищаться от такого надо на сетевом уровне, если есть смысл. Упадет, когда кончится Integer, но может упасть и раньше, если ресурсы кончатся. Просто надо сделать максимум при создании экземпляров Винсоков на форме, например 300. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2013, 23:59 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
убрал строчку Код: vbnet 1.
и создал на форме контролов winsock1(1..1000) так? честно говоря не совсем понимаю чем это добавит стабильности, просвяти пожалста. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2013, 10:28 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
обновил клиент, пока только интерфейс, winsock еще не дублировал на форме. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2013, 12:03 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Ghepardубрал строчку Код: vbnet 1.
и создал на форме контролов winsock1(1..1000) так? честно говоря не совсем понимаю чем это добавит стабильности, просвяти пожалста.а зачем? надо было просто ограничить загрузку очередного винсока при превышении ограничения ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2013, 12:19 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Shocker.Pro, дык ошибка сразу, у меня же уже на форме будет 300 винсоков загружены если их на форме разместить ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2013, 12:45 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
а я не правильно тебя понял, не проснулся еще тогда) дело в том что винсоксы рано или поздно все равно кончатся, т.к. они создаются при коннекте, если играть человек 500 будет да ещё и досить, то лонг и за день кончится, а без новых винсоков никак, только если старые задействовать, но я не совсем себе представляю как это сделать, так что единственным решением я вижу что действительно когда будет приближаться к лонг, то автоматом тушить и запускать сервер. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2013, 12:51 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
какой порт лучше всего использовать для сервера? в исходнике 85, с приятелем тестили у него ошибку выдавало на клиенте, поставили 1001, заработало... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2013, 12:53 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
как вариант: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
но вроде Winsock1(NumSockets).Close не моментален ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2013, 13:16 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
обалдеть, работает.... 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2013, 13:29 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Ghepard, В данной теме VB.NET Winsock многопоточный сервер я ранее писал про свой маленький веб-сервер. Он загружает 100 винсоков в коллекцию. И при необходимости, когда появился реквест выделяет свободный и отдаёт на подключение. Когда сокет закрывается, используемый винсок снова возвращается в коллекцию. Итого достаточно стабильно работало всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2013, 20:01 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Ghepardкакой порт лучше всего использовать для сервера? в исходнике 85, с приятелем тестили у него ошибку выдавало на клиенте, поставили 1001, заработало...Порты до 1024 считаются зарезервированными для разных сетевых служб. Вот список зарегистрированных портов, которые точно не стоит использовать: тынц . ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2013, 12:20 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Load Winsock1(NumSockets) не убирай! Совсем не сложно помечать переменной(масив) as boolean о состоянии Socket (используется или не используется). Если по количеству сокетов мало, тогда используй Load, иначе используй закрытые сокеты (отработанные). Порт можно слушать один и тот же даже если используется много подключений. Использование коллекции почти равноценно работает как SET, но только это массив. Были случаи когда нужно было применять =nothing, так как работает связывание (таблицы баз данных пробовал в коллекцию заганять - работает). Для удобной работы можно пользоваться классами. Скорость чуть снижается, но без них не комфортно программировать. TCP порт - гарантирует доставку, но на клиенте он уже отправил данные, а сервер мог еще не принять, хотя клиент говорит 100% все выгрузил. Там как-то на уровне буферизации происходит - с опозданием. Для Game Server как раз не очень и подходит, ну только если игра стратегическая (на большое время). Пробовал атаковать на один порт параллельными потоками одновременно. 8 соединений и одновременных скачок поддерживает без проблем, но нужно ставить задержку (я использовал таймер в 10мс) на отправку данных - НЕ ЦЫКЛ!, так как была практика и цикл со временем вызовет ошибку с неизвестным характером (что-то о Memory). Если использовать цыкл, то наблюдается увеличение памяти самой программы (можно посмотреть в диспетчере), и работает при этом в десятки медленней. Когда объем достигает какого-то предела по всей видимости и выскакивает эта ошибка. Но с таймерами все спокойно. Единственное, что на протяжении дня все работает, а на протяжении недели замечал другие баги, которые не могу отследить. У меня иногда не используются закрытые порты и срабатывает Load для нового Winsock. Но это уже моя ошибка. Что-то недоглядел. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 12:34 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Андрей159Андрей159, привет. Тебе же уже советовали купить клавиатуру с энтером Ну серьезно, тяжеловато читать такой "кирпич" ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 12:45 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Shocker.Pro, Сори. И спешил и хотел сжато все изложить что знаю. Как-никак раньше сам наивно спрашивал, а теперь зубы проел с сокетом. Пора переходить на видеоблоги) тока с русским у меня не очень (я из Украины). Разговариваю нормально, но могут ржать от одного неверно сказанного слова. Да и на сколько меня хватит. до 15 видеосюжетов бы снял, а дальше бы просто исчерпался. Часто не понимаю откуда у вас столько времени, чтобы всегда отвечать и просто жить на сайте. У меня просто дома ремонт делают. Меня все бесит, не могу ничего делать. Та и думаю почитаю, отвечу где что знакомо. Даже на работе начальство позволяет делать что хочу, а свободного времени полно, но интересней всегда что-то создавать, делать, а вот читать/отвечать на это нет времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2013, 13:54 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
Андрей159, разбор полетов. Load Winsock1(NumSockets) не убирай! #Winsock1(NumSockets).Close# - Это? Совсем не сложно помечать переменной(масив) as boolean о состоянии Socket (используется или не используется). Если по количеству сокетов мало, тогда используй Load, иначе используй закрытые сокеты (отработанные). #Сокет = Сессия?# В моем понятии у каждого псевдо winsock1(индексового) может быть только одна сессия. А если на форме разместить 2 отдельных самостоятельных winsock то они не смогут совместно юзать один порт! Чем не устраивает Winsock.state??? 7 сессия открыта, 0 сесиия закрыта, остальные значения, занято и тип.того. Порт можно слушать один и тот же даже если используется много подключений. #Слушать да, но это не реалтайм, приходит запрос на создание сессии, подгружается, если ещё не загружен индексовый очередной winsock и берет на себя управление, и только после этого продолжается прослушка, это очень быстро происходит, но одновременно 2 запроса не могут быть обработаны на одном порту.# Если я в чем то заблуждаюсь здесь, то далее по тексту советы просто не пойму, вроде бы уже всё сделал всё работает, клозить полюбому надо. В общем ключ сокет это сессия или нет))) В чем совет заключается не могу понять))) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2013, 00:29 |
|
Игровой сервер winsosk
|
|||
---|---|---|---|
#18+
to Ghepard: "А если на форме разместить 2 отдельных самостоятельных winsock то они не смогут совместно юзать один порт!" - Слушать одновременно не получиться, но я предлогаю (у меня так работает) слушать порт и в случае подключения вновь слушать этот порт следующим свободным сокетом. "но одновременно 2 запроса не могут быть обработаны на одном порту" Могут. Разберемся только о чем кто думает. - Слушать порт №nn можно только чем-то одним - Делая процедуру подключения к порту, выделяется уникальный ID код по которому потом будет происходить общение, а порт №nn освобождается - Этот порт №nn можно другим сокетом слушать, что делает приложение многопользовательским или многопотоковым - С каждым соединением программа справится (нет такого понятия как одновременно, не вовремя включили прослушку), поскольку информацию мы снимаем с буфера, принимаем и отправляем в буфер, так как tcp протокол этот протокол с гарантией приема/доставки и как он работает на уровне ассемблера не известно, главное работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2013, 03:49 |
|
|
start [/forum/topic.php?all=1&fid=60&tid=2156648]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
79ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 196ms |
0 / 0 |