Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Winsock - как отслеживать активные соединения ? Нужна подсказка 
V
    Опции темы
XPurple
Дата 5.9.2006, 06:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



За основу (для открытия tcp-сокета) был взят пример из статьи http://www.dotfix.net/[email protected]
Но проблема в том, что при закрытии соединения , не отслеживается количество и номер (не знаю ,как правильно сказать) соединений. В итоге каждое следующее соединение имеет на один номер больше.
Т.е. если имеем 1,3,7 соединение, то при открытии следующего - соединение будет иметь номер 8, а не номер 2, например, (элемент массива "убиваю" по сигналу Winsock.State=8 с помощью unload).
Подскажите, может быть, я маюсь ерундой, пытаясь поймать освободившееся соединение и какое количество соединений, если не отслеживать номера соединений, а будет всегда увеличиваться на единицу, будет максимальным ?

Код
Private intMax As Long

Private Sub Form_Load()
intMax = 0
sckServer(0).LocalPort = 1001
sckServer(0).Listen
End Sub

Private Sub sckServer_ConnectionRequest _
(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
intMax = intMax + 1
Load sckServer(intMax)
sckServer(intMax).LocalPort = 0
sckServer(intMax).Accept requestID
Load txtData(intMax)
End If
End Sub

Привел код из примера, чтобы было ясно: о чем идет речь.

Это сообщение отредактировал(а) XPurple - 5.9.2006, 06:32
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
mihanik
Дата 5.9.2006, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Прикольно!!!

Цитата(XPurple @  5.9.2006,  06:18 Найти цитируемый пост)
 http://www.dotfix.net/[email protected]


Очень похоже на http://www.vbstreets.ru/VB/Articles/65548.aspx

Мож, это поможет?

Это сообщение отредактировал(а) mihanik - 5.9.2006, 07:03

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  eXamle.zip 4,76 Kb


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
XPurple
Дата 5.9.2006, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



mihanik, 
Та же статья
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
mihanik
Дата 5.9.2006, 07:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Посмотри в архиве, что я выложил выше.

По-моему, там есть решение твоей проблемы.



--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
XPurple
Дата 5.9.2006, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



mihanik
На первый взгляд: вроде ,то что требуется. Немного коряво в примере реализовано через On error
Ну ничего.
p.s. Хотелось бы узнать еще ответ по 2-му вопросу- о максимальном количестве открытых сокетов.

Это сообщение отредактировал(а) XPurple - 5.9.2006, 07:45
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
boevik
Дата 5.9.2006, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



В какой то момент жизни winsock ты должен производить закрытие конекта.
(У меня это происходит в dataarrival после короткого разговора с клиентом)

Параллейно с массивом winsock имеется массив boolean-s который в момент открытия сокета i выставляет в Free(i) = False
В момент закрытия winsock(i) => Free(i) = True.

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




--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
XPurple
Дата 5.9.2006, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



boevik, 
Массив в любом случае придется ,похоже, использовать, потому как счетчиком или в цикле for.. to процессом создания нового элемента соединения управлять не получится. Это я уже понял.
Количество сокетов (он же массив) -какого размера указывать ?
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
boevik
Дата 5.9.2006, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



Цитата(XPurple @  5.9.2006,  07:50 Найти цитируемый пост)
Количество сокетов (он же массив) -какого размера указывать ? 

Все зависит от нагрузки твоего сервера.
У меня очень короткие, но много конектов с клиентами.
Мне хватает 20 сокетов
В дополнение, сделал опцию, что если все 20 сокетов заняты, то дбавляются ещё 10, и т.д., до 100.
В какой то момент, я их даже сокращаю.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
XPurple
Дата 5.9.2006, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



boevik
Это понятно.
Количество портов(не сокетов) ограничивается числом 65535 , а про максимальное количество сокетов на одном порту-не могу найти информацию. Я вот про что.
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
boevik
Дата 5.9.2006, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



На одном порте только один сокет!


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
XPurple
Дата 5.9.2006, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



boevik, 
Понятно.
Спросим иначе.
Тогда сколько можно использовать двунаправленных tcp-каналов (соединений) на один сокет? Интересует максимальное значение.

--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
boevik
Дата 5.9.2006, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



На один сокет можно использовать только один конект по определеному порту.
Прграмма может держать много открытых сокетов (каждый на своем порте) и работать с ними параллейно.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
XPurple
Дата 5.9.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 4.5.2006
Где: Челябинск

Репутация: 1
Всего: 1



boevik, 
Ясно.
Создал массив Boolean из 20-ти элементов и отслеживаю соединения, как вы предложили, с помощью этого массива.
Работает, вроде.

p.s. Какой командой определить ip-адрес клиента, подключенного к серверу через сокет ?

Это сообщение отредактировал(а) XPurple - 5.9.2006, 12:57
--------------------
Кто никогда ни о чем не спрашивает: тот либо знает все, либо не знает ничего.  Не помню, кто сказал, может быть, я   (с) 
PM MAIL   Вверх
boevik
Дата 5.9.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



У Winsock есть properties RemoteIP, RemotePort, RemoteHost они возвращают соотвествествующие значения клиента


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.