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

Вниз

Цикл для ClientSocket plz Help   Найти похожие ветки 

 
PInokio   (2004-01-11 14:15) [0]

Сеществует проблема.
Слушаю порт с помощью ServerSocket.
Хочу чтоб ClientSocket скнировал локальные адреса 192.168.0.0 - 192.168.0.255 чтоб прога увидела сервер.
Как узнать что нет коннекта?
Наверное в событии OnError ClientSocket"а?

Пихаю в цикл попытки коннекта ClientSocket"а, но событие OnError происходит только при выходе из цикла.
Как мне организовать такую штуку?
Например в StarCraft или дугих играх вижу имя сервера (кто создал сетевую игру), потом просто коннекчусь к нему.


 
cr   (2004-01-11 15:58) [1]

зачем сканировать ?
клиент при попытке подключиться сначала шлет
бродкаст запрос по UDP например на 192.168.0.255
Сервера откликаются и шлют ему инфу ....


 
pinokio   (2004-01-11 16:09) [2]

Мне надо в цикле передать сообщение для компов


 
pinokio   (2004-01-11 16:10) [3]

без TimeOut это занимае очень много времени как сделать быстрее


 
cr   (2004-01-11 17:42) [4]

Я так понимаю ты TCP пользуеш ?
Это хорошо конечно но дико медленно попробуй
UDP и бродкаст-рассылки для локалки и этого
достаточно а работать будет раз в дцать
быстрее особенно если Thread"ы будеш пользовать.


 
Piter ©   (2004-01-11 18:01) [5]

Нефиг создавать две одинаковые темы - http://delphimaster.net/view/6-1073819731/

>быстрее особенно если Thread"ы будеш пользовать
каким образом с потоками будет быстрее, если использовать все таки броадкаст? :)


 
pinokio   (2004-01-12 11:42) [6]

блин мне именно под TCP ,ладно помогите сделать чтобы этот код работал хоть немного быстрее

procedure TForm1.Button1Click(Sender: TObject);
begin
Application.ProcessMessages;

ClientSocket1.Host := "204.184.4." + IntToStr (Current);
ClientSocket1.Port := 110;
Memo1.Lines.Clear;
Stopped := FALSE;
ClientSocket1.Open;
end;

procedure TForm1.ConnectNext;
begin
Application.ProcessMessages;

if ClientSocket1.Active then
ClientSocket1.Close;
if Stopped then
Exit;
Inc (Current);
if Current > Last then
Exit;
ClientSocket1.Host := "204.184.4." + IntToStr (Current);
ClientSocket1.Open;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);
begin
ClientSocket1.Socket.SendText("0000");
Memo1.Lines.Add (Socket.RemoteHost + "(" + Socket.RemoteAddress + ") - Ok!");
ConnectNext;
end;

procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
if ErrorCode = 10060 then
Memo1.Lines.Add (ClientSocket1.Host + " - " + "Auee??ai....")
//else Memo1.Lines.Add (ClientSocket1.Host + " - " + "Iioaiu eaionoo ?oayo....");
ErrorCode := 0;
ConnectNext;
end;


 
Piter ©   (2004-01-12 21:02) [7]

pinokio

я даже в твоем примере разбираться не хочу. Понятно, что ты хочешь связываться с помощью TCP/IP. НО! Рассылку оповещений можно вполне делать через UDP по броадкасту... все остальное по TCP

P.S. UDP такой же стандарт как и TCP



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

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

Наверх




Память: 0.48 MB
Время: 0.029 c
9-1060691784
Legafor
2003-08-12 16:36
2004.03.28
Оцените мою игру, пожалуйста!


11-1056642764
belousov
2003-06-26 19:52
2004.03.28
Доступны ли в KOL компон. доступа к БД и соотв. визуальн. комп.


3-1077126980
Karlson
2004-02-18 20:56
2004.03.28
Построчный select


6-1073738740
yorik
2004-01-10 15:45
2004.03.28
ICQ Pager


8-1069406674
Летящий
2003-11-21 12:24
2004.03.28
Позиционирование Image в ImageList