Форум: "Сети";
Текущий архив: 2002.09.23;
Скачать: [xml.tar.bz2];
ВнизBroadCast в Delphi Найти похожие ветки
← →
Net Cognition (2002-07-07 12:24) [0]Здравствуйте.
Каким образом можно послать широковещательной сообщение в ЛВС средствами делфи или WinAPI (не суть важно) главное чтобы послалось. Можно ли это сделать через Client(Server)Socket в Делфи.
С Уважением Net Cognition.
← →
[nex] (2002-07-07 22:54) [1]Попробуй почитать про UDP, на этом строятся все безсерверные чаты...
← →
Net Cognition (2002-07-08 00:00) [2]Я посмотрю, но если речь идет о чате (насколько Я понимаю), то там не все хосты, а только часть и посылка идет в цикле по всем подкюченым каналам. А нужно конкретный broadcast, т.е. всем хостам всей сети (всех сегментов).
← →
Velocity (2002-07-08 06:27) [3]Надо направлять пакет на наибольший возможный адрес в сети. Например я так делаю: типовой IP - 169.254.0.xxx - отсылаю на 169.254.0.255, ловится всеми, но все равно броадкаст использовать не рекомендую, бывает сервер такого не поддерживает, лучше циклом по всем адресам пройтись.
← →
Net Cognition (2002-07-08 20:15) [4]В Unix на каждый интерфейс (сетевая карта) взависимости от конкретной подсети (169.254.0.xxx - например) существует свой brodcast адресс. При использовании функции setsockopt(...) и параметра SO_BROADCAST он сам вытаскивает этот адресс. Это удобно, чтобы для каждой подсети не bild"ить проект или не натруждать user"a. В WinSock есть таже самамя функция
setsockopt(...), но вопрос как в TClientSocket установить эту опцию или узнать этот адресс.
P.S. например host=localhost он (Delphi) понимает что это 127.0.0.1 а вот пишишь host=broadcast ругается на адресс.
← →
MrBeer (2002-07-19 00:59) [5]Naskolko ya znaju broadcast adres vichislaetsja sledujuschim obrazom - broadcast = (IP or (not netmask)) - tobish na IP addres nakladivaetsja invertirovanii netmask cherez binarnii OR.
best regards.
← →
Digitman (2002-07-19 09:56) [6]Ндентификатор localhost определен в файле hosts и имеет значение по-умолчанию 127.0.0.1
Никакого broadcast там нет и быть не может.
В принципе, ты имеешь полное право и можешь самостоятельно декларировать в этом файле любое имя хоста, но в ситуации с TClientSocket тебе это никак не поможет.
Объект класса TClientSocket при выполнении метода Open() создает гнездо, инициализируемое для работы в режиме SOCK_STREAM. Бродкаст же возможен только для гнезд, инициализированных для работы в режиме SOCK_DGRAM. Посему класс TClientSocket не может работать с использованием UDP-протокола, и бродкаст ты выполнить его средствами не сможешь. И нет никакого резона пытаться выполнить setsockopt(so_broadcast) для поточного гнезда - вызов 100%-но даст отказ.
Для целей бродкаста используй либо класс TNMUDP либо создавай гнездо и работай с ним "ручками" средствами непосредственно WinsockAPI.
← →
Digitman (2002-07-19 10:12) [7]Вот подтверждение (фрагмент хэлпа):
sendto is normally used on a connectionless socket to send a datagram to a specific peer socket identified by the to parameter. Even if the connectionless socket has been previously connected to a specific address, to overrides the destination address for that particular datagram only. On a connection-oriented socket, the to and tolen parameters are ignored; in this case, the sendto is equivalent to send.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2002.09.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c