![]() |
|
Модераторы: Akina |
![]()
|
|
| manson |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 21.5.2007 Репутация: нет Всего: нет |
Краткое описание:
На сервере имеется массив винсоков. Первый елемент массива всегда активен, так как отслеживыет новые запросы на соединения. На стороне сервера:
На стороне клиента:
Описание проблемы: Запускаю сервер. Подключается клиент №1 - все нормально, связь с сервером установлена. Затем удачно подключается клиент №2, в ходе чего, почему то отключается №1. Если отключить №2, то №1 снова восстанавливает связь с сервером сам. Таким образом последний подключившийся глушит связь всех предыдущих, пока сам находица в работе. |
||||||
|
|||||||
| neic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 839 Регистрация: 28.1.2007 Репутация: нет Всего: 7 |
Попробуй записать это в глобальную переменную.
Ещё можно попробовать давать клиенту не порт 1777, а порт 1778. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
У тебя пересечение по портам, winsock видимо не умеет это обрабатывать...
Попробуй испольбзовать нулевой экземпляр для получения параметров соединения, в которых передавать номер порта для установления рабочего коннекта, а саму работу вести на порте, отличном от 1777... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| neic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 839 Регистрация: 28.1.2007 Репутация: нет Всего: 7 |
Akina, как раз то что я писал выше =)
Тут наверн как ICQ делает, все подключаются к 5190, а при подключении он выдаёт адрес и порт куда коннектится. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
Во-первых, ICQ выдает только адрес, а порт как был, так и остается 5190 или что ты поставишь в настройках (у меня 443 выставлен, например). Во-вторых, я говорю немного о другом, всё-таки. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| XOXOJI |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 20.9.2008 Репутация: 2 Всего: 2 |
поступить лучше так...
кидаю кусок кода из своей проги пояснения... max_online-количество пользователей, которые были когда либо подключены за период работы проги (она глобальная!!!)
Это сообщение отредактировал(а) XOXOJI - 14.11.2008, 11:11 |
|||
|
||||
| manson |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 21.5.2007 Репутация: нет Всего: нет |
Акина, я примерно понел. Клиент посылает запрос на соединение. На сервере его принемает нулевой елемент массива и в ответ отправляет свободный порт. Получается клиент должен повторно реконектица когда получает инфу с новым портом. Я правильно понел?
|
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
Совершенно верно.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| manson |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 21.5.2007 Репутация: нет Всего: нет |
Акина, я знаю как єто реализовать на стороне клиента. Но вот на стороне сервера возникают непонятки с последовательностью обработки запросов. Как сервер будет различать, пришол ли это первый запрос или запрос уже на соединение по новому порту? Подскажите, пожалуйста, как дополнить мой вышезазначеный код со стороны сервера. Заранее спасибо!
Это сообщение отредактировал(а) manson - 14.11.2008, 14:37 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
А зачем ему это? Пришел запрос на соединение - сервер загружает экземпляр винсока на новый порт и сообщает его клиенту (или сообщает, что пока свободных портов нет, можно курить)... если винсок в течение заданного времени (скажем 5 минут или там полчаса) не получил ни одного запроса, или получил сигнал о завершении сеанса - он самоликвидируется. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| manson |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 21.5.2007 Репутация: нет Всего: нет |
А да, точно! Спасибо за помощь
|
|||
|
||||
| manson |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 21.5.2007 Репутация: нет Всего: нет |
Блин, всеравно не выходит
сервер загружает экземпляр винсока на новый порт
Где ошибка? |
|||
|
||||
| manson |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 21.5.2007 Репутация: нет Всего: нет |
И вообще какая разница между LocalPort и RemotePort?
|
|||
|
||||
| neic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 839 Регистрация: 28.1.2007 Репутация: нет Всего: 7 |
Отредактировано читай ниже
Это сообщение отредактировал(а) neic - 14.11.2008, 23:26 |
|||
|
||||
| neic |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 839 Регистрация: 28.1.2007 Репутация: нет Всего: 7 |
Такс =) ТЫ меня заинтриговал и я сам решил написать сервер-клиент
Вот код сервера:
вот код клиента:
Это сообщение отредактировал(а) neic - 14.11.2008, 23:30 |
||||
|
|||||
| manson |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 21.5.2007 Репутация: нет Всего: нет |
короче я проверил и отследил такое: клиент посылает данные на сервер - тут все норм. проблема оказалась в другом - сервер неправильно отсылает данные клиенту, отсылая их только одному клиенту. к примеру, подключено три клиента и он трижды шлет одному из них данные (тобишь неправильно распределяет).
в этом случае поче му то получает данные только последний. Это сообщение отредактировал(а) manson - 15.11.2008, 18:18 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
А где ты закрываешь сеанс связи с первым клиентом??? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| neic |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 839 Регистрация: 28.1.2007 Репутация: нет Всего: 7 |
И у меня этот код работает. Не знаю, что там у тебя. Повторяю коды:
Добавлено через 1 минуту и 53 секунды
Где 2, это кол-во подключённых клиентов. |
||||||
|
|||||||
| XOXOJI |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 20.9.2008 Репутация: 2 Всего: 2 |
у меня в примере это предусмотрено |
|||
|
||||
| manson |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 21.5.2007 Репутация: нет Всего: нет |
Акина, я нигде связь не закрываю! А зачем это нужно делать?
neic, везет тебе. У меня почему то шлет все последнему. По твоему коду это 2 винсок. |
|||
|
||||
| neic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 839 Регистрация: 28.1.2007 Репутация: нет Всего: 7 |
Я писал и не такие клиенты. Для примера достаточно того, что я написал. Если автор хочет чтобы сделали за него, то за $ можно и весь проект написать. |
|||
|
||||
| manson |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 21.5.2007 Репутация: нет Всего: нет |
Автор не хочет! Сам не тупой и умею загружать, выгружать и находить не занятые. Проблема в том, что почему то инфа шлется только на один из винсоков, хотя код у меня правильный.
|
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
Вот именно затем и следует закрывать сеанс, чтобы ответ получал нужный клиент, а не первый из незакрытых. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| manson |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 21.5.2007 Репутация: нет Всего: нет |
Акина, тогда скажи, пожалуйста, в каком месте надо закрывать (на стороне сервера или клиента) и каким способом.
Примерно так? |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
Конечно... Ты открыл сокет и слушаешь. Как только пришел запрос на соединение - ты формируешь сокет для работы по этому запросу, отправляешь параметры для работы (номер порта) и закрываешь соединение, продолжая слушать, не постучится ли кто-нить ещё.
Кстати, неплохо бы от клиента получать какие-нить его данные (например SID текущей учётной записи) - чтобы ... впрочем, придумай сам и тогда уж реши, надо оно тебе или нет. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| neic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 839 Регистрация: 28.1.2007 Репутация: нет Всего: 7 |
Я так понял, чтобы вести лог событий...т.е. заданые настройки, сохранённая инфа и т.д.? Интересно. Тогда можно будет закрывать каждый клиент => освободит от нужд пинговать клиент, чтобы проверить "живы" ли клиенты. Т.е. 1запрос=1винскосу, который после посылки сообщения отключается, но при этом каждый раз придётся подключаться к серверу. или я что-то не так понял. |
|||
|
||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
Серверу должно быть глубоко плевать, живы клиенты или нет. Это ИХ забота сообщать серверу что они живы.
Что за ...? Не путай начальное подключение для получения параметров соединения (с нулевым сокеном) и сеанс связи с переданным на клиента сокетом. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| XOXOJI |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 20.9.2008 Репутация: 2 Всего: 2 |
что-то я вас совсем не пойму.... зачем разные порты??? на мой взгляд это лиш лишний гемор, но это можно реализовать так
сервер
клиент
|
||||
|
|||||
| neic |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 839 Регистрация: 28.1.2007 Репутация: нет Всего: 7 |
Вот интересно, к чему мне подключатся если сервер не открыт???? Учитывая что строчка:
стоит в событии:
Мне становится очень интересно, а к чему собственно будет подключаться первый клиент???? Мы уже с акиной разобрали, что порты тут не причём. Это сообщение отредактировал(а) neic - 17.11.2008, 18:01 |
||||
|
|||||
| XOXOJI |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 20.9.2008 Репутация: 2 Всего: 2 |
гдето я утра с просони за тупил, сорри
|
|||
|
||||
| manson |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 21.5.2007 Репутация: нет Всего: нет |
Продолжая тему, кому еще интересно...
Проблема была не в портах, а просто надо было заменить это:
На это:
И все клиенты получат желаемые данные. Спасибо всем за поддержку. |
||||
|
|||||
| Drave |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 29.9.2007 Репутация: нет Всего: нет |
Сорри за то что поднимаю тему но т.к. пользуюсь подобным кодом хотел спросить как сделать так чтобы при отключения одного из клиентов сервер не отправлял ему данные? А то если он шлет ему данные тоже то возникает ошибка(
|
|||
|
||||
![]()
|
| Правила форума "VB6" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB6 | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |