Форум: "Сети";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];
ВнизЧат в локальной сети с динамическим IP (tcp) Найти похожие ветки
← →
Velimir © (2006-04-03 23:13) [0]Первое: Извиняюсь если где-то такое уже было... Но я честно не нашел.
Второе: На самом деле вопросов в теме задан не совсем корректно.
Итак, ТЗ:
1. Есть локальная сеть в которой IP не статические, а динамические (может это и не важно, но для полноты картины).
2. Надо организовать (для простоты назовем) чат. Что это на самом деле не важно.
3. Из-за того что доставка данных должна быть гарантирована выбран TCP
4. Но все дело в том, что пользователи приходят в разное время. Поэтому первый включившийся должен быть серваком. Прим.: на основной сервак раздающий IP ставить незя.
5. В процессе работы пользователи могут выходить из чата в том числе и сам сервер.
В связи с этим вопрос как лучше организоваться? (алгоритмы и советы по реализации)
И еще вопрос: можно ли связать два компа без использования компонента сервера, т.е. соединить между собой двух клиентов (вроде в компонентах есть события по отсылке и по приему)?
Заранее благодарен!
← →
tesseract © (2006-04-04 10:25) [1]
> можно ли связать два компа без использования компонента
> сервера,
сервер от клиента недалеко падает. Зачем тебе сервер ?
UDP широковещательный запрос раз 1-3 минуты, для определения действующих клиентов. А там посылай прямо клиенту на IP.
← →
Eraser © (2006-04-04 10:51) [2]
> Velimir © (03.04.06 23:13)
> 2. Надо организовать (для простоты назовем) чат. Что это
> на самом деле не важно.
важно! вернее важно какая технология - одноранговая или клиент/сервер.
Сервер в идеальном варианте не должен инициировать соединения.
> 4. Но все дело в том, что пользователи приходят в разное
> время. Поэтому первый включившийся должен быть серваком.
> Прим.: на основной сервак раздающий IP ставить незя.
тогда надо отказываться от клиент/серверной организации, т.к. такой подход к хорошему не приведёт, imho.
> И еще вопрос: можно ли связать два компа без использования
> компонента сервера, т.е. соединить между собой двух клиентов
> (вроде в компонентах есть события по отсылке и по приему)?
>
нет.
← →
Belorus © (2006-04-04 18:35) [3]Можно без сервера. Но тогда юзай Mailslot
← →
Eraser © (2006-04-04 18:49) [4]
> Belorus © (04.04.06 18:35) [3]
> Но тогда юзай Mailslot
это ещё зачем..? у этих мэил слотов куча ограничений и недостатков по сравнению с TCP/IP.
← →
Velimir © (2006-04-04 21:08) [5]>tesseract ©
UDP не подходит. Он не гарантирует доставку данных.
← →
Velimir © (2006-04-04 21:17) [6]>Eraser ©
Ну в сети будет не более десятка абонентов. Передоваемые данные, скорее всего, не более 512 байт...
На самом деле я хочу взять чат из примера и маленько его перекроить...
Но вот как сделать так чтобы при исчезновении одного сервака возникал другой...
И как сделать так чтобы при случайном обрыве связи с серваком, клиент не становился серваком сам, т.к. тогда возникает 2 сервака... Вот это для меня вопрос...
← →
Eraser © (2006-04-04 21:22) [7]
> Velimir © (04.04.06 21:17) [6]
а потом вдруг неожиданно потребуется встроить доску для рисования и передачу файлов... что делать будешь? - переделывать на TCP.
← →
Сергей М. © (2006-04-05 08:39) [8]
> Velimir © (04.04.06 21:08) [5]
> UDP не подходит. Он не гарантирует доставку данных.
Зато UDP дает возможность широковещательной рассылки сообщений.
Вновь вошедший клиент делает такую рассылку (мол, я здесь, c таким-то IP-адресом, откликнитесь кто есть живой в сети), а получатели этого сообщения (прочие активные клиенты) в ответ извещают вопрошающего клиента о своих IP-адресах, после чего можно будет устанавливать TCP-соединения с теми или иными клиентами.
← →
Slym © (2006-04-05 13:55) [9]Сергей М. © (05.04.06 8:39) [8] - правильно
1. Без UDP всеравно не обойтись (именно broadcast для выяснения компов).
2. Если уж очень хочется 1 сервер динамический иметь. разработай алгоритм выбора сервера, к примеру: LANBrowser:
1. Если сервер исчез 1 обнаруживший рассылает UDP broadcast (NO SERVER) и ждет 1 сек.
2. Все в ответ клиенты отсылают UDP/TCP (direct) версию винды и TickCount (время работы от загрузки)
3. Инициатор выборов выбирает из всех сервер (Выше версия винды и больше TickCount) и рассылает UDP broadcast: SERVER IS IP сервера
4. Сервер периодично оповещает что он сервер: SERVER IS IP сервера
5. Новый клиент UDP broadcast: WHO SERVER в ответ (direct) SERVER IS IP сервера иначе стать сервером.
← →
Slym © (2006-04-05 14:02) [10]И нужно обработать колизию когда 2 и более компов одновременно обнаружат отсутствие сервера и пошлют NO SERVER...
хотя даже при этом варианте выбор будет однозначен, только бродкастов чуть больше
можно сразу после обнаружения отсутствия сервера сделать задержку на Random мсек
← →
Eraser © (2006-04-05 14:07) [11]
> Сергей М. © (05.04.06 08:39) [8]
> Зато UDP дает возможность широковещательной рассылки сообщений.
> Slym © (05.04.06 13:55) [9]
> 1. Без UDP всеравно не обойтись (именно broadcast для выяснения
> компов).
хотя поддержку чистого UDP необходимо делать, но всё таки самые продвинутые чаты for LAN уже попереходили на Multicast по-умолчанию.
Хотя multicast сервер может принимать UDP пакеты, т.к. это почти одно и тоже.
← →
Velimir © (2006-04-06 08:43) [12]>Slym © (05.04.06 13:55)
Спасибо за конкретные советы!
Тогда еще вопрос. В 7ой дельфе есть кроме стандартных компонентво, компоненты от Indy. Вопрос чем они отличаются? Какие из них понадежнее?
← →
tesseract © (2006-04-06 10:58) [13]
> хотя поддержку чистого UDP необходимо делать,
А есть ещё и нечистый ? креститься придётся?
UDP конечно не гарантирует доставки, но её нормально выполняет. Если из дома выйдешь тоже нет гарантии, что ты туда вернёшься.
подтверждение доставки выполяется просто, CRC UDP поддерживает, просто в ответ на получения сообщения просто отсылаем подтверждение о доставке и всё, никаках TCP-соединений не надо.
Я например пользуюсь indy 9. Нормальные компоненты, кидаешь UDP-server и спокойно всё делаешь.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.039 c