Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.048 c
1-1152619279
Rater1
2006-07-11 16:01
2006.08.27
передать данные из excel в приложение


2-1154962343
ArtemESC
2006-08-07 18:52
2006.08.27
Не найдеться ли у кого функция,


1-1152854018
AlexeyT
2006-07-14 09:13
2006.08.27
Библиотека RegEx с поиском в файлах?


15-1146670466
es
2006-05-03 19:34
2006.08.27
Конвертер аудио


2-1154342098
zamtmn
2006-07-31 14:34
2006.08.27
Как "динамический" вызать конструктор?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский