Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 373

/ вопрос открыт /

Приветствую, мужики! Хотел написать прогу для общения по локальной сети (чат). Порылся в нете... из нормальных вариантов нашёл только то что лучше её делать на idTCP , вот только примеров не нашёл путёвых. Може черкнёте основу как собственно это делать. Заранее спасибо!

eclipse Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: eclipse (статус: Посетитель)
Вопрос отправлен: 2 июля 2010, 10:49
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, eclipse!
На этой странице http://www.indyproject.org/Sockets/Demos/index.EN.aspx можно найти примеры. В частности, для 9 indy есть архив, а в нем папка Chat - там как раз нужный пример. Правда если у Вас 10 indy, то примеры придется немного подкорретировать, но в целом идея остается.
Там есть ещё очень много интересных примеров - почтовых серверов, вебсерверов с ssl.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 2 июля 2010, 21:53


Мини-форум вопроса

Всего сообщений: 14; последнее сообщение — 5 июля 2010, 13:14; участников в обсуждении: 4.
DNK

DNK (статус: Студент), 2 июля 2010, 13:05 [#1]:

Почему именно idTCP? Где-то в файловом архиве должен быть чат написанный на сокетах. Кроме того TCP-протокол подходит только для чатов с выделенным сервером. Есть большая группа чатов для локальных сетей в виде однотипных клиентов без сервера, которые используют для обмена UDP.
"Digital Networked Knight"
Amidamaru

Amidamaru (статус: 4-ый класс), 2 июля 2010, 20:30 [#2]:

примеров чата для локальной сети с помощью TCP ты нигде и не найдешь, потомучто они все делаются на UDP
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
Вадим К

Вадим К (статус: Академик), 2 июля 2010, 21:47 [#3]:

Что Вы говорите:)))
Делают и на TCP и много чатов построено на нем. Более того, и на TCP можно сделать без выделенного сервера.
Галочка "подтверждения прочтения" - вселенское зло.
DNK

DNK (статус: Студент), 2 июля 2010, 22:26 [#4]:

Согласен. Дрова можно и лопатой наколоть. ;-)
"Digital Networked Knight"
Amidamaru

Amidamaru (статус: 4-ый класс), 2 июля 2010, 23:22 [#5]:

Цитата (Вадим К):

Что Вы говорите:)))
Делают и на TCP и много чатов построено на нем. Более того, и на TCP можно сделать без выделенного сервера.
и на них можно найти исходник на delphi? ссылку в студию! интересно посмотреть как там всё устроено, без UDP.
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
Вадим К

Вадим К (статус: Академик), 3 июля 2010, 01:09 [#6]:

Сорцы с ссылкой не дам, но могу рассказать, как это делается.
Суть в том, что некоторые клиенты становятся серверами. Клиенты знают адреса серверов. Если один с серверов выключается, то один с клиентов становится сервером. Кол-во серверов так рассчитывается, что бы исключить возможность одновременного выключения всех серверов.
Сообщения клиентом отправляются на все сервера одновременно, а те рассылают клиентам. Что бы сообщения не дублировались, они имеют сквозные номерки. Сообщения статуса - это тоже сообщения чата (то есть они имеют ту же нумерацию) и это решает проблему последовательности событий.
Классическая реализация этой идеи - Скайп. Он имеет выделенные сервера, но исключительно для проверки логина-пароля и решения денежных вопросов. То есть, теоретически можно отсылать сообщения в сети скайп с произвольным логином (скайпнеймом) без проверки пароля. Но протокол пока не вскрыт.
Галочка "подтверждения прочтения" - вселенское зло.
DNK

DNK (статус: Студент), 3 июля 2010, 09:04 [#7]:

А откуда клиенты знают адреса серверов?
"Digital Networked Knight"
Вадим К

Вадим К (статус: Академик), 3 июля 2010, 12:40 [#8]:

Например, опять же тот скайп решает эту проблему просто - у него в инсталляции забит список. Но потом он обновляет свою базу адресов. Клиенты могут делиться адресами.
Если же у нас локальная сеть, то можно сделать так - все клиенты являются пассивными серверами (никто нам не мешает так делать). Новый клиент при старте смотри свой айпи и подсеть и начинает пробегать по списку айпишников своей подсети. Первый попавшийся клиент (а мы договорились, что он является пассивным сервером), отдает ему все нужные настройки и перенаправляет на нужный сервер. Или стает сам для него сервером. Если в сети есть несколько клиентов, а сканировать будем многопоточно, то первый клиент найдется быстро.

Возможны и другие варианты. Например, в сети есть машина с известным именем, которая отдает данные о серверах, это может хорошо работать в больших сетях.

Третий вариант - использование dns.

Ну и конечно никто не отменяет UDP запроса для получения сервера:) но это уже другая история.

Много чатов для локальных сетей как раз так и раз так и работают - UDP для установки соединения, TCP для чата.
Галочка "подтверждения прочтения" - вселенское зло.
DNK

DNK (статус: Студент), 3 июля 2010, 21:11 [#9]:

%-) Возможны и другие варианты. Наколоть дрова граблями. Третий вариант - стрелять из пушки по воробьям.
"Digital Networked Knight"
eclipse

eclipse (статус: Посетитель), 4 июля 2010, 10:08 [#10]:

Да точно! Вадим. Скайп непробиваем... по крайнеё мере по нему можно без проблем вирусники и команды засылать :)
Вадим К

Вадим К (статус: Академик), 4 июля 2010, 14:16 [#11]:

Третий вариант - это не из пушки по воробьям. Так делают многие чаты для локальных сетей. Это хороший вариант.
Галочка "подтверждения прочтения" - вселенское зло.
DNK

DNK (статус: Студент), 4 июля 2010, 20:57 [#12]:

Тогда рассказывай. Я в своей деревне ни одной локальной сети с DNS не видел. Всегда группу подымают.
"Digital Networked Knight"
Вадим К

Вадим К (статус: Академик), 5 июля 2010, 02:03 [#13]:

ну в деревнях не подымают, а у меня на локальном компе свой стоит.
А вот если есть интернет через проксю, то практически каждый провайдер подымает - экономия трафика просто неимоверная.
Галочка "подтверждения прочтения" - вселенское зло.
DNK

DNK (статус: Студент), 5 июля 2010, 13:14 [#14]:

Ну дык будешь рассказывать? Или нет?
"Digital Networked Knight"

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:58
Выполнено за 0.02 сек.