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

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

широковещательный 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.


Наверх

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