Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Broadcast


Страницы:   1 2

NickolayLI ©   (2002-11-13 14:59:00) 

привет всем

кто-нить использует компоненты Indy idUDpClient and idUDPServer?

не получается реализовать broadcast, ессли клиента запустить на же машине где и программа-сервер, то клиент к серверу цепляется, а если клиента запустить на какой-нить другой тачке в локалке, то клиент посылая broadcast и сервер не видит :(

Пока


Malder   (2002-11-19 18:45:00) [1]

Рассылай как посоветовал Song © (15.11.02 14:25)


nickolayLI   (2002-11-19 07:15:00) [2]

это я у себя знаю сколько у меня подсетей, а вот допустим у какого-нить клиента, откуда я могу знать сколько у него подсетей :)


Malder   (2002-11-18 22:42:00) [3]

Ну SendBroadcast не может делать тоже самое, что SendTo, ибо нафига тогда оно нужно ?

А если несколько подсетей - рассылай в несколько подсетей броадкасты.

А какие подсети у тебя есть ?


NickolayLi   (2002-11-18 18:50:00) [4]

2>Malder

SendBroadcast, есть такое дело, но оно делает тоже самое, xто и SendTo(..). (Хелпа под рукой нету, так бы показал :( )
SendTo("10.1.1.255", 7, Packet, SizeOf(Packet));
^^ - у меня несколько подсетей!
Я в предыдущих сообщениях писал уже об этой проблеме!
До свидания...


Malder   (2002-11-18 18:26:00) [5]

А теперь скажи. Если ты будешь делать так:

IdUDPClient1.Binding.SendTo(" 10.1.1.255", 7, Packet, SizeOf(Packet));

то работает ?

Если работает, то значит не пиши 255.255.255.255

И вообще, вроде в инди есть спец. функция для отправки броадкастов. Что-то типа SendBroadcast (или как-то так, поищи). А ты пользуешься SendTo

P.S. И вообще, пользуйся WinApi или каким-нибудь простеньким TNMUDP. А то я смотрю инди какой-то навороченный через одно место...


nickolayLI   (2002-11-18 13:22:00) [6]

2>Malder
на клиенте в обработчике OnTimer
Packet := 4096;
IdUDPClient1.BroadcastEnabled := True;
IdUDPClient1.Binding.SendTo("255.255.255.255", 7, Packet,
SizeOf(Packet));
IdUDPClient1.BroadcastEnabled := False;
ReceivedString := IdUDPClient1.ReceiveString();
if ReceivedString = "" then begin
Memo1.Lines.Clear;
Memo1.Lines.Add("No response received from the server
after " + IntToStr
(IdUDPClient1.ReceiveTimeout) + "
millseconds.")
end;
end;
на сервере
при создании формы:
IdUDPServer1 := TIdUDPServer.Create(nil);
with IdUDPServer1 do begin
Bindings.Add.Port := 7;
DefaultPort := 3333;
ThreadedEvent := True;
BroadcastEnabled := True;
OnUDPRead := UDPServerUDPRead;
BufferSize := 4096;
Active := True;
end;

procedure TmainForm.UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
var
DataStringStream: TStringStream;
s: String;
begin
DataStringStream := TStringStream.Create("");
try
DataStringStream.CopyFrom(AData, AData.Size);
s := ABinding.PeerIP;
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, s[1], Length(s));
finally
DataStringStream.Free;
end;
end;


//end;


Malder   (2002-11-17 21:59:00) [7]

Приведи исходник приема броадкаста сервером.


BackStabber   (2002-11-17 17:46:00) [8]

Так, я тоже долго парился потом все проблемы решились.
Вообще советую TIdUDPClient не пользоваться остановись на сервере, там отличия минимальные=)
В Default port устанавливаешь порт, по которому будем слушать, после этого можеш компоненту акнивизировать. Отправка сообщения
таким макаром:
ABinding.SendTo(ABinding.PeerIP, Variables.UDPWriteSocket ,s, Length(s)); (ну это, конечно, не самый удачный пример, просто в событии OnUDPRead я отвечаю опять же по UDP тому, о кого пришло сообщение)
Соответственно, PeerIP - IP приславшего мессагу
Variables.UDPWriteSocket - сокет, по которому отправляем мессагу
Солответственно он должен быть таким же и у DefaultPort принимающего
s - строка, которую отправляем
следующий параметр вроде все ясно)


Вот и все если будут вопросы пиши на мыло помогу

nikk@altec.ru


nickolayLI   (2002-11-15 20:01:00) [9]

Эх...


nickolayLI   (2002-11-15 17:47:00) [10]

да он делает, то что нужно, если я ему укажу RemoteHost=
10.1.1.255, но если сделать RemoteHost=255.255.255.255 то не видит клиент сервер, и всё тут :((


Digitman   (2002-11-15 17:42:00) [11]

ну а причем здесь функц-ть ИМЕННО СЕРВЕРА ? Любой UDP-компонент, будь то хоть TNMUDP, делает то, что тебе нужно


nickolayLI   (2002-11-15 17:39:00) [12]

клиент просто по сети шлет широковещательные пакеты, а сервер должен их поймать по идее, мне просто интересно как это реализовывается всё :(, помал от клиент пакет, передал обратно клиенту что сервер есть и всё, больше ничего :(
а у меня не выходит...
а <Song> что такое и где его взять можно?


Digitman   (2002-11-15 17:29:00) [13]


> мне нужно имеенно broadcast.


Ну и юзай то, что двигает <Song> ! Какие проблемы-то ?

А касаемо UDP-сервера ..
Поясни, что ты хочешь поиметь от серверной стороны ? Какую функц-ть ?


nickolayLI   (2002-11-15 17:15:00) [14]

а чем юзать стандартным? не подходит.
мне нужно имеенно broadcast.


Digitman   (2002-11-15 17:13:00) [15]


> Посмотрел хелп, и что простое описание функции


На то хэлп и существует


> исходников от Инди у меня нету


Оч жаль. Ищи. Или откажись от Indy.
Совет : никогда не пользуйся "халявным" софтом без исх.текстов, если есть альтернатива


nickolayLI   (2002-11-15 16:56:00) [16]

Посмотрел хелп, и что простое описание функции, исходников от Инди у меня нету, только библы...


Digitman   (2002-11-15 16:47:00) [17]


> хотя тама


Хотя тута - у тебя перед носом - полные исходники Indy и хэлп "Winsock2 API programmer"s reference", они, видимо, для Пушкина существуют, который уже "тама" ?)


nickolayLI   (2002-11-15 16:38:00) [18]

мне не понятно почему у idUDPClient толком не пашет
IdUDPClient1.BroadcastEnabled := True;
IdUDPClient1.SendBuffer("255.255.255.255", IdPORT_ECHO,
Packet, SizeOf(Packet));


nickolayLI   (2002-11-15 16:34:00) [19]

пакеты рассылает но программа сервер их не ловаит :(
хотя тама idUDPServer


nickolayLI   (2002-11-15 14:33:00) [20]

это я так понял для клиента.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо