Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.27;
Скачать: CL | DM;

Вниз

Чат в локальной сети с динамическим 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.05 c
1-1152541631
LeXaXaXa
2006-07-10 18:27
2006.08.27
Как перехватить сообщение закрытия окна?


6-1144146711
WebSqlNeederr
2006-04-04 14:31
2006.08.27
Закрыть вылетающееся окошко ошибки ИЕ, вернее кликнуть на ОК


2-1155026269
Hadroran
2006-08-08 12:37
2006.08.27
Даже не знаю как тему назвать


1-1152393567
leonidus
2006-07-09 01:19
2006.08.27
Как отоброзить в ListBox`е большой StringList?


15-1154384228
Razor
2006-08-01 02:17
2006.08.27
Изучение java