Главная страница
    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.039 c
2-1155139658
ProgramMaker_
2006-08-09 20:07
2006.08.27
Как после того как я сделал Hide, снова восстановить форму?


15-1154082799
Сергей_С
2006-07-28 14:33
2006.08.27
Как применить функцию из OBJ в проекте на VC++


15-1154412475
Карелин Артем
2006-08-01 10:07
2006.08.27
bahoor - что тако?


15-1154063502
bau009
2006-07-28 09:11
2006.08.27
Borland Developer Studio 2006 - различие продуктов


2-1154729045
Петюха
2006-08-05 02:04
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский