Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];

Вниз

Broadcast   Найти похожие ветки 

 
NickolayLI   (2002-11-13 14:59) [0]

привет всем

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

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

Пока


 
NickolayLi   (2002-11-13 22:00) [1]

Парни не дайте умереть :((


 
NickolayLI   (2002-11-14 13:40) [2]

Парни? посоветуйте плиз че-нить....
голова не варит уже....

пока.


 
nickolayLI   (2002-11-15 13:18) [3]

Никто не знает? :(


 
Song   (2002-11-15 13:30) [4]

А обязательно надо отправить broadcast UDP через компоненты?


 
nickolayLI   (2002-11-15 14:08) [5]

а как еще?
можно конечно и програмно, но толку то никакого всеравно нету, пробовал и так делать.
пакеты клиент не видит сервер с другого компа, а видит только сервер тогда когда его запустишь на той же такче где и сервер



 
Song   (2002-11-15 14:13) [6]

А через компоненты это не программно? :)


 
nickolayLI   (2002-11-15 14:16) [7]

нет, имеется ввиду без компонент на форме :)


 
Song   (2002-11-15 14:25) [8]

Не знаю то ли я понял, что Вам нужно.. Попробуйте вот это:

procedure TMainForm.FormCreate(Sender: TObject);
var Init:TWSAData;
SockOpt:BOOL;
Sock:TSocket;
Target:TSockAddrIn;
begin
WSAStartup($101,Init);
Sock:=Socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
SockOpt:=TRUE;
SetSockOpt(Sock,SOL_SOCKET,SO_BROADCAST,PChar(@SockOpt),SizeOf(SockOpt)) ;
Target.sin_port:=htons(8167);//номер порта
Target.sin_addr.S_addr:=INADDR_BROADCAST;
Target.sa_family:=AF_INET;
SendTo(Sock,Data,DataBytes,0,Target,SizeOf(Target));
WSACleanup;
end;


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

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


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

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


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

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


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


> хотя тама


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


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

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


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


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


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


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


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


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

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


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


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


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

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


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

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


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

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


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

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


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

Эх...


 
BackStabber   (2002-11-17 17:46) [21]

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


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

nikk@altec.ru


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

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


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

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-18 18:26) [24]

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

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 18:50) [25]

2>Malder

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


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

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

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

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


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

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


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

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



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.01 c
3-62443
Максим
2002-12-19 11:24
2003.01.20
SUM в TQuery - точность суммирования


3-62348
ShadowSnake
2002-12-27 09:27
2003.01.20
Как добавить информацию в базу из файла


14-62847
Неумник
2002-12-29 14:44
2003.01.20
Стимуляторы для мозгов


14-62748
ION T
2003-01-02 15:40
2003.01.20
Текст на


1-62553
Керик
2002-12-31 07:59
2003.01.20
Сохранение и загрузка файлов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский