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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 1 914

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

Доброго времени суток, уважаемые эксперты!
Хочу написать программу, которая бы связывала несколько компьютеров в сеть, где нету сервера (главного компьютера). Каждый должен быть и клиентом и сервером. Компьютеры находятся в локальной сети.
1. Какой компонент в Delphi 7 выбрать? Желательно использовать протокол TCP. С UDP у меня были проблемы.
2. Если использовать TIdTCPClient и TIdTCPServer, то можно ли поместить их оба в одно приложение и работать через один и тот-же порт?
3. Как мне передать по сети данные типа
Buffer: array[1..51200] of Byte;
и принять их, переведя в такой-же формат?

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

Вопрос задал: prgd7 (статус: Посетитель)
Вопрос отправлен: 18 сентября 2008, 16:19
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Feniks

Здравствуйте, prgd7!
Ознакомтесь со статейкой "Обмен информацией по TCP" в Атаче, возможно она вас наталкнет на умные мысли. ;-)

P.S. Желаю удачи.
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 18 сентября 2008, 17:49
Оценка за ответ: 4

Комментарий к оценке: Статья написана именно про те компоненты, которые я хотел использовать. Но в статье описано про создание серверного и клиентского приложений отдельно, а я задавал вопрос про создание "сети компьютеров" БЕЗ сервера.
Статья дала мне понять, что на этих компонентах нельзя построить моё приложение (или можно, но с большими ухищрениями), так что можно щитать, что Feniks, в каком то роде, дал мне ответ на поставленный вопрос.

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

Всего сообщений: 6; последнее сообщение — 18 сентября 2008, 17:51; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 18 сентября 2008, 16:40 [#1]:

Вы хотите перенаправить траффик от своего приложения, или вообще?
Галочка "подтверждения прочтения" - вселенское зло.
prgd7

prgd7 (статус: Посетитель), 18 сентября 2008, 17:15 [#2]:

Видимо я неточно выразился. Попробую описать поподробнее суть программы.
Несколько компьютеров в локальной сети с запущенной программой (этой самой) поначалу являются серверами (в том смысле, что ожидают связи с ними). Какая-то из этих программ "вдруг" (по прозьбе пользователя) переключается в режим клиента и начинает отправлять запросы остальным серверам, с прозьбой прислать ей некие данные. Сервер присылает ей эти данные.
Сканирование серверов, мне кажется не вызовет проблем (100 адресов и перебором можно проверить). Проблема в том, что любая из этих программ может стать клиентом, и их может быть несколько одновременно. Какие же компоненты использовать?
Вадим К

Вадим К (статус: Академик), 18 сентября 2008, 17:25 [#3]:

Можно и TCP, можно и UDP. Надо помнить, что на одной машине (если точнее, то на одном айпи-адресе) и заданном порте может быть только один сервер. А клиентов - сколько выдержит система (теоретически - не больше 50000, но под XP/Vista это число может оказаться равным 10 - Майкрософт постаралась. На серверых вариантах ос этой проблемы нет).
Если все компьютеры одной физической подсетке, то сами данные можно передавать обычным TCP, а вот сканирование сделат на основе UDP. Когда клиенту надо получить информацию, он делает широковещательный запрос типа "кто работает, отзовитесь". Остальные, получив такой запрос, делают ответый UDP ответ. Сам клиент выждав некоторые время, записывает всех отвечающих в список. Кто не успел - тот опоздал. А дальше, имея список, можно работать обычными методами.
Галочка "подтверждения прочтения" - вселенское зло.
prgd7

prgd7 (статус: Посетитель), 18 сентября 2008, 17:37 [#4]:

Хорошо. А как передать данные типа
Buffer: array[1..51200] of Byte;
используя TCP? Приведите пример, если не сложно. (просто я плохо разбираюсь в потоковых данных).
Вадим К

Вадим К (статус: Академик), 18 сентября 2008, 17:41 [#5]:

там вроде был метод SendBuffer или что то в этом стиле. На другой стороне программа дожна быть готова к приёму.
Может проще взять демки Indy и посмотреть?
Галочка "подтверждения прочтения" - вселенское зло.
prgd7

prgd7 (статус: Посетитель), 18 сентября 2008, 17:51 [#6]:

Ладно. В общем вы мне помогли с идеей разделения запросов и пересылки данных по разным протоколам (UDP и TCP).
Спасибо.

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 12 декабря 2017, 17:05
Выполнено за 0.12 сек.
Рейтинг@Mail.ru