| 
| 
 | Вопрос # 4 373/ вопрос открыт / | 
 |  Приветствую, мужики! Хотел написать прогу для общения по локальной сети (чат). Порылся в нете... из нормальных вариантов нашёл только то что лучше её делать на idTCP , вот только примеров не нашёл путёвых. Може черкнёте основу как собственно это делать. Заранее спасибо! 
|  |   Вопрос задал: 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 (статус: Студент), 2 июля 2010, 13:05 [#1]:Почему именно idTCP? Где-то в файловом архиве должен быть чат написанный на сокетах. Кроме того TCP-протокол подходит только для чатов с выделенным сервером. Есть большая группа чатов для локальных сетей в виде однотипных клиентов без сервера, которые используют для обмена UDP. "Digital Networked Knight" |  
|   | Amidamaru (статус: 4-ый класс), 2 июля 2010, 20:30 [#2]:примеров чата для локальной сети с помощью TCP ты нигде и не найдешь, потомучто они все делаются на UDP |  
|   | Вадим К (статус: Академик), 2 июля 2010, 21:47 [#3]:Что Вы говорите  )) Делают и на TCP и много чатов построено на нем. Более того, и на TCP можно сделать без выделенного сервера.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | DNK (статус: Студент), 2 июля 2010, 22:26 [#4]:Согласен. Дрова можно и лопатой наколоть.   "Digital Networked Knight" |  
|   | Amidamaru (статус: 4-ый класс), 2 июля 2010, 23:22 [#5]: Цитата (Вадим К): и на них можно найти исходник на delphi? ссылку в студию! интересно посмотреть как там всё устроено, без UDP.Что Вы говорите  )) 
Делают и на TCP и много чатов построено на нем. Более того, и на TCP можно сделать без выделенного сервера. |  
|   | Вадим К (статус: Академик), 3 июля 2010, 01:09 [#6]:Сорцы с ссылкой не дам, но могу рассказать, как это делается. Суть в том, что некоторые клиенты становятся серверами. Клиенты знают адреса серверов. Если один с серверов выключается, то один с клиентов становится сервером. Кол-во серверов так рассчитывается, что бы исключить возможность одновременного выключения всех серверов.
 Сообщения клиентом отправляются на все сервера одновременно, а те рассылают клиентам. Что бы сообщения не дублировались, они имеют сквозные номерки. Сообщения статуса - это тоже сообщения чата (то есть они имеют ту же нумерацию) и это решает проблему последовательности событий.
 Классическая реализация этой идеи - Скайп. Он имеет выделенные сервера, но исключительно для проверки логина-пароля и решения денежных вопросов. То есть, теоретически можно отсылать сообщения в сети скайп с произвольным логином (скайпнеймом) без проверки пароля. Но протокол пока не вскрыт.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | DNK (статус: Студент), 3 июля 2010, 09:04 [#7]:А откуда клиенты знают адреса серверов? "Digital Networked Knight" |  
|   | Вадим К (статус: Академик), 3 июля 2010, 12:40 [#8]:Например, опять же тот скайп решает эту проблему просто - у него в инсталляции забит список. Но потом он обновляет свою базу адресов. Клиенты могут делиться адресами. Если же у нас локальная сеть, то можно сделать так - все клиенты являются пассивными серверами (никто нам не мешает так делать). Новый клиент при старте смотри свой айпи и подсеть и начинает пробегать по списку айпишников своей подсети. Первый попавшийся клиент (а мы договорились, что он является пассивным сервером), отдает ему все нужные настройки и перенаправляет на нужный сервер. Или стает сам для него сервером. Если в сети есть несколько клиентов, а сканировать будем многопоточно, то первый клиент найдется быстро.
 
 Возможны и другие варианты. Например, в сети есть машина с известным именем, которая отдает данные о серверах, это может хорошо работать в больших сетях.
 
 Третий вариант - использование dns.
 
 Ну и конечно никто не отменяет UDP запроса для получения сервера
  но это уже другая история. 
 Много чатов для локальных сетей как раз так и раз так и работают - UDP для установки соединения, TCP для чата.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | DNK (статус: Студент), 3 июля 2010, 21:11 [#9]:%-) Возможны и другие варианты. Наколоть дрова граблями. Третий вариант - стрелять из пушки по воробьям. "Digital Networked Knight" |  
|   | eclipse (статус: Посетитель), 4 июля 2010, 10:08 [#10]:Да точно! Вадим. Скайп непробиваем... по крайнеё мере по нему можно без проблем вирусники и команды засылать   |  
|   | Вадим К (статус: Академик), 4 июля 2010, 14:16 [#11]:Третий вариант - это не из пушки по воробьям. Так делают многие чаты для локальных сетей. Это хороший вариант. Галочка "подтверждения прочтения" - вселенское зло. |  
|   | DNK (статус: Студент), 4 июля 2010, 20:57 [#12]:Тогда рассказывай. Я в своей деревне ни одной локальной сети с DNS не видел. Всегда группу подымают. "Digital Networked Knight" |  
|   | Вадим К (статус: Академик), 5 июля 2010, 02:03 [#13]:ну в деревнях не подымают, а у меня на локальном компе свой стоит. А вот если есть интернет через проксю, то практически каждый провайдер подымает - экономия трафика просто неимоверная.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | DNK (статус: Студент), 5 июля 2010, 13:14 [#14]:Ну дык будешь рассказывать? Или нет? "Digital Networked Knight" |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |