Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.25;
Скачать: CL | DM;

Вниз

широковещательный connect   Найти похожие ветки 

 
Dok   (2005-06-01 20:56) [0]

несколько TCPClient клиентов в сети, одновременно являющиеся и серверами TCPServer. Необходимо при открытии формы узнать на каких компьютерах запущена данная программа. Пробовал реализовать вручную через Connect, но при отсутствии программы на удаленном хосте - прорамма виснет секунд на 10. И так на каждом хосте. Хотелось бы узнать мгновенно (типа как в ку-чате)...


 
Eraser ©   (2005-06-01 20:59) [1]

Dok   (01.06.05 20:56)

Тут тебе поможет протокол UDP.


 
Dok   (2005-06-01 21:01) [2]

Хех, в том то и дело, что хочу на TCP. :) Просто хочу узнать где стоит моя программа...


 
Reindeer Moss Eater ©   (2005-06-01 21:05) [3]

Тебе какая разница по какому протоколу получать данные о том где запущена программа?
Ты же сам сказал Хотелось бы узнать мгновенно


 
Eraser ©   (2005-06-01 21:07) [4]

Dok   (01.06.05 20:56)

Через TCP в общем случае задача не решаема, в частном - можно отсылать запросы всем компам из "Сетевого окружения", но это по-моему извращение.

ЗЫ Можно ещё через Multicast сделать...


 
Dok   (2005-06-01 21:08) [5]

UDP протокол вроде как закрыт файрволами... Ладно, спасибо,  просто думал есть готовое решение. Будем разбираться дальше...


 
Dok   (2005-06-01 21:10) [6]

сошлите плиз меня на хэлпную прогу как на UDP это реализовать...


 
Alexander Panov ©   (2005-06-01 21:44) [7]

Dok   (01.06.05 20:56)
но при отсутствии программы на удаленном хосте - прорамма виснет секунд на 10


Почему виснет? В какой момент?


 
Dok   (2005-06-01 21:53) [8]

дык сервак на удаленном хосте не запущен, поэтому наверное и тормозит... Connect именно виснет на 10 секунд...


 
Alexander Panov ©   (2005-06-01 22:02) [9]

Dok   (01.06.05 21:53) [8]

По адресу подключаешься или по имени?
Компоненты какие используешь?


 
Eraser ©   (2005-06-01 22:17) [10]

Alexander Panov ©   (01.06.05 22:02) [9]
По адресу подключаешься или по имени?
Компоненты какие используешь?


Так эти имена/адреса надо откуда-то ещё брать... а откуда? Тут udp нужен.


 
Dok   (2005-06-01 22:20) [11]

Ага, тока что через него сделал. Всё рулит. Спасибо за советы...


 
Глеб ©   (2005-06-02 04:46) [12]


> Dok   (01.06.05 22:20) [11]


А как это моэно сделать?
Я вот тоже с этим сейчас мучаюсь.


 
Lex_! ©   (2005-06-02 06:06) [13]

Broadcast
одна подсеть


 
Lex_! ©   (2005-06-02 06:07) [14]


> Connect именно виснет на 10 секунд...

локалка если - таймаут соединения поставь одну секунду...


 
Dok   (2005-06-02 08:44) [15]

Где ставить тайаут не нашёл.
Делал через 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");

шоумессаг не отработал ни разу... Т.е. приема ответа не было ни разу. Трабла не знаю где. Фаеры отключены.
Искал в форуме - такая же у всех незадача...


 
Dok   (2005-06-02 09:01) [16]

Сниффером ловится пакет...
Странно. а программой не ловится...
Помогите...

==============================================================================
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..+.........._
000010 C0 A8 01 FF 04 2F 00 00 | 00 09 46 FE 30              ...../....F.0


 
Глеб ©   (2005-06-02 09:08) [17]

В Delphi 6 в папках Demos\Internet и Demos\Indy есть примеры.


 
Dok   (2005-06-02 09:14) [18]

Нет возможности достать 6-ю версию. В моих примерах - ссылка на сайт, на сайте только tcp примеры.
кань если не сложно на dimushkin@mail.ru
Буду очень благодарен...


 
Dok   (2005-06-02 09:59) [19]

Всё, разобрался сам.
закрывайте тему...


 
Eraser ©   (2005-06-02 15:03) [20]

Dok   (02.06.05 08:44) [15]
Клиент UPD:
broadcast:=true;
port:=0;
host:="192.168.1.255" - моя локалка
active:=true;


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



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

Текущий архив: 2005.09.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.026 c
14-1125339597
Константинов
2005-08-29 22:19
2005.09.25
Жизнь прекрасна, если Вы еще можете посмеяться над собой.


6-1117604167
CSTR
2005-06-01 09:36
2005.09.25
Проблема с сокетами


14-1124897139
Marser
2005-08-24 19:25
2005.09.25
Одним эйрганнером больше


14-1125469580
12DFBDDh
2005-08-31 10:26
2005.09.25
Кодовая страница cp866


1-1125550714
Goga
2005-09-01 08:58
2005.09.25
TStream