![]() |
|
Модераторы: Akina |
![]()
|
|
| XPurple |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 4.5.2006 Где: Челябинск Репутация: 1 Всего: 1 |
За основу (для открытия tcp-сокета) был взят пример из статьи http://www.dotfix.net/[email protected]
Но проблема в том, что при закрытии соединения , не отслеживается количество и номер (не знаю ,как правильно сказать) соединений. В итоге каждое следующее соединение имеет на один номер больше. Т.е. если имеем 1,3,7 соединение, то при открытии следующего - соединение будет иметь номер 8, а не номер 2, например, (элемент массива "убиваю" по сигналу Winsock.State=8 с помощью unload). Подскажите, может быть, я маюсь ерундой, пытаясь поймать освободившееся соединение и какое количество соединений, если не отслеживать номера соединений, а будет всегда увеличиваться на единицу, будет максимальным ?
Привел код из примера, чтобы было ясно: о чем идет речь. Это сообщение отредактировал(а) XPurple - 5.9.2006, 06:32 --------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего. Не помню, кто сказал, может быть, я (с) |
|||
|
||||
| mihanik |
|
|||
![]() -=Белый Медведь=- ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4054 Регистрация: 24.4.2006 Где: г. Тверь Репутация: 11 Всего: 109 |
Прикольно!!!
Очень похоже на http://www.vbstreets.ru/VB/Articles/65548.aspx Мож, это поможет? Это сообщение отредактировал(а) mihanik - 5.9.2006, 07:03 Присоединённый файл ( Кол-во скачиваний: 10 )
eXamle.zip 4,76 Kb |
|||
|
||||
| XPurple |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 4.5.2006 Где: Челябинск Репутация: 1 Всего: 1 |
mihanik,
Та же статья --------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего. Не помню, кто сказал, может быть, я (с) |
|||
|
||||
| mihanik |
|
|||
![]() -=Белый Медведь=- ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4054 Регистрация: 24.4.2006 Где: г. Тверь Репутация: 11 Всего: 109 |
Посмотри в архиве, что я выложил выше.
По-моему, там есть решение твоей проблемы. |
|||
|
||||
| XPurple |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 4.5.2006 Где: Челябинск Репутация: 1 Всего: 1 |
mihanik
На первый взгляд: вроде ,то что требуется. Немного коряво в примере реализовано через On error Ну ничего. p.s. Хотелось бы узнать еще ответ по 2-му вопросу- о максимальном количестве открытых сокетов. Это сообщение отредактировал(а) XPurple - 5.9.2006, 07:45 --------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего. Не помню, кто сказал, может быть, я (с) |
|||
|
||||
| boevik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: 12 Всего: 35 |
В какой то момент жизни winsock ты должен производить закрытие конекта.
(У меня это происходит в dataarrival после короткого разговора с клиентом) Параллейно с массивом winsock имеется массив boolean-s который в момент открытия сокета i выставляет в Free(i) = False В момент закрытия winsock(i) => Free(i) = True. Отсюда, в момент оплучения request, требуется произвести поиск в массиве Free, чтоб найти первый свободный сокет и ему предать управление подключением. -------------------- Никогда не говори никогда |
|||
|
||||
| XPurple |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 4.5.2006 Где: Челябинск Репутация: 1 Всего: 1 |
boevik,
Массив в любом случае придется ,похоже, использовать, потому как счетчиком или в цикле for.. to процессом создания нового элемента соединения управлять не получится. Это я уже понял. Количество сокетов (он же массив) -какого размера указывать ? --------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего. Не помню, кто сказал, может быть, я (с) |
|||
|
||||
| boevik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: 12 Всего: 35 |
Все зависит от нагрузки твоего сервера. У меня очень короткие, но много конектов с клиентами. Мне хватает 20 сокетов В дополнение, сделал опцию, что если все 20 сокетов заняты, то дбавляются ещё 10, и т.д., до 100. В какой то момент, я их даже сокращаю. -------------------- Никогда не говори никогда |
|||
|
||||
| XPurple |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 4.5.2006 Где: Челябинск Репутация: 1 Всего: 1 |
boevik
Это понятно. Количество портов(не сокетов) ограничивается числом 65535 , а про максимальное количество сокетов на одном порту-не могу найти информацию. Я вот про что. --------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего. Не помню, кто сказал, может быть, я (с) |
|||
|
||||
| boevik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: 12 Всего: 35 |
На одном порте только один сокет!
-------------------- Никогда не говори никогда |
|||
|
||||
| XPurple |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 4.5.2006 Где: Челябинск Репутация: 1 Всего: 1 |
boevik,
Понятно. Спросим иначе. Тогда сколько можно использовать двунаправленных tcp-каналов (соединений) на один сокет? Интересует максимальное значение. --------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего. Не помню, кто сказал, может быть, я (с) |
|||
|
||||
| boevik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: 12 Всего: 35 |
На один сокет можно использовать только один конект по определеному порту.
Прграмма может держать много открытых сокетов (каждый на своем порте) и работать с ними параллейно. -------------------- Никогда не говори никогда |
|||
|
||||
| XPurple |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 4.5.2006 Где: Челябинск Репутация: 1 Всего: 1 |
boevik,
Ясно. Создал массив Boolean из 20-ти элементов и отслеживаю соединения, как вы предложили, с помощью этого массива. Работает, вроде. p.s. Какой командой определить ip-адрес клиента, подключенного к серверу через сокет ? Это сообщение отредактировал(а) XPurple - 5.9.2006, 12:57 --------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего. Не помню, кто сказал, может быть, я (с) |
|||
|
||||
| boevik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: 12 Всего: 35 |
У Winsock есть properties RemoteIP, RemotePort, RemoteHost они возвращают соотвествествующие значения клиента
-------------------- Никогда не говори никогда |
|||
|
||||
![]()
|
| Правила форума "VB6" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB6 | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |