![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
широковещательный connect [D7, WinXP]
Dok © (2005-06-01 20:56:00)несколько TCPClient клиентов в сети, одновременно являющиеся и серверами TCPServer. Необходимо при открытии формы узнать на каких компьютерах запущена данная программа. Пробовал реализовать вручную через Connect, но при отсутствии программы на удаленном хосте - прорамма виснет секунд на 10. И так на каждом хосте. Хотелось бы узнать мгновенно (типа как в ку-чате)...
Eraser (2005-06-02 15:03:00) [1]Dok (02.06.05 08:44) [15]
Клиент UPD:
broadcast:=true;
port:=0;
host:='192.168.1.255' - моя локалка
active:=true;
А порт кто будет ставить?
Dok (2005-06-02 09:59:00) [2]Всё, разобрался сам.
закрывайте тему...
Dok (2005-06-02 09:14:00) [3]Нет возможности достать 6-ю версию. В моих примерах - ссылка на сайт, на сайте только tcp примеры.
кань если не сложно на dimushkin@mail.ru
Буду очень благодарен...
Глеб (2005-06-02 09:08:00) [4]В Delphi 6 в папках Demos\Internet и Demos\Indy есть примеры.
Dok (2005-06-02 09:01:00) [5]Сниффером ловится пакет...
Странно. а программой не ловится...
Помогите...
==============================================================================
Packet ID: 1 TTL: 128
Packet size: 29 bytes type: UDP
Source IP : 192.168.1.95: 12036
Destination IP : 192.168.1.255: 0
------------------------------ Packet dump -----------------------------------
000000 45 00 00 1D 2B 10 00 00 | 80 11 8B 11 C0 A8 01 5F E..\x1D+.........._
000010 C0 A8 01 FF 04 2F 00 00 | 00 09 46 FE 30 ...../....F.0
Dok (2005-06-02 08:44:00) [6]Где ставить тайаут не нашёл.
Делал через UDP - сервер не принимает пакеты. Почему не знаю.
Клиент UPD:
broadcast:=true;
port:=0;
host:='192.168.1.255' - моя локалка
active:=true;
Сервер UPD:
broadcast:=true;
Active:=true;
procedure TChatF.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
StringFormatedStream: TStringStream;
msgType:integer;
MSG,S:string;
begin
showmessage(msg);
try
StringFormatedStream := TStringStream.Create('');
StringFormatedStream.CopyFrom(AData, AData.Size);
MSG:=StringFormatedStream.DataString;
msgType:=StrToInt(MSG);
Case msgType of
0: IdUDPClient1.Send('1');
1: ListBox1.Items.Add(ABinding.PeerIP);
end;
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, s[1], Length(s)); //перенаправляем сообщение
StringFormatedStream.Free;
except
end;
end;
IdUDPServer1.Active:=true;
HostList.Clear;
IdUDPClient1.Host:='192.168.1.255';
IdUDPClient1.Active:=true;
IdUDPClient1.Send('0');
шоумессаг не отработал ни разу... Т.е. приема ответа не было ни разу. Трабла не знаю где. Фаеры отключены.
Искал в форуме - такая же у всех незадача...
Lex_! (2005-06-02 06:07:00) [7]
> Connect именно виснет на 10 секунд...
локалка если - таймаут соединения поставь одну секунду...
Lex_! (2005-06-02 06:06:00) [8]Broadcast
одна подсеть
Глеб (2005-06-02 04:46:00) [9]
> Dok (01.06.05 22:20) [11]
А как это моэно сделать?
Я вот тоже с этим сейчас мучаюсь.
Dok (2005-06-01 22:20:00) [10]Ага, тока что через него сделал. Всё рулит. Спасибо за советы...
Eraser (2005-06-01 22:17:00) [11]Alexander Panov © (01.06.05 22:02) [9]
По адресу подключаешься или по имени?
Компоненты какие используешь?
Так эти имена/адреса надо откуда-то ещё брать... а откуда? Тут udp нужен.
Alexander Panov (2005-06-01 22:02:00) [12]Dok (01.06.05 21:53) [8]
По адресу подключаешься или по имени?
Компоненты какие используешь?
Dok (2005-06-01 21:53:00) [13]дык сервак на удаленном хосте не запущен, поэтому наверное и тормозит... Connect именно виснет на 10 секунд...
Alexander Panov (2005-06-01 21:44:00) [14]Dok (01.06.05 20:56)
но при отсутствии программы на удаленном хосте - прорамма виснет секунд на 10
Почему виснет? В какой момент?
Dok (2005-06-01 21:10:00) [15]сошлите плиз меня на хэлпную прогу как на UDP это реализовать...
Dok (2005-06-01 21:08:00) [16]UDP протокол вроде как закрыт файрволами... Ладно, спасибо, просто думал есть готовое решение. Будем разбираться дальше...
Eraser (2005-06-01 21:07:00) [17]Dok (01.06.05 20:56)
Через TCP в общем случае задача не решаема, в частном - можно отсылать запросы всем компам из "Сетевого окружения", но это по-моему извращение.
ЗЫ Можно ещё через Multicast сделать...
Reindeer Moss Eater (2005-06-01 21:05:00) [18]Тебе какая разница по какому протоколу получать данные о том где запущена программа?
Ты же сам сказал Хотелось бы узнать мгновенно
Dok (2005-06-01 21:01:00) [19]Хех, в том то и дело, что хочу на TCP. :) Просто хочу узнать где стоит моя программа...
Eraser (2005-06-01 20:59:00) [20]Dok (01.06.05 20:56)
Тут тебе поможет протокол UDP.