![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Цикл для ClientSocket plz Help
PInokio © (2004-01-11 14:15:00)Сеществует проблема.
Слушаю порт с помощью ServerSocket.
Хочу чтоб ClientSocket скнировал локальные адреса 192.168.0.0 - 192.168.0.255 чтоб прога увидела сервер.
Как узнать что нет коннекта?
Наверное в событии OnError ClientSocket'а?
Пихаю в цикл попытки коннекта ClientSocket'а, но событие OnError происходит только при выходе из цикла.
Как мне организовать такую штуку?
Например в StarCraft или дугих играх вижу имя сервера (кто создал сетевую игру), потом просто коннекчусь к нему.
Piter (2004-01-12 21:02:00) [1]pinokio
я даже в твоем примере разбираться не хочу. Понятно, что ты хочешь связываться с помощью TCP/IP. НО! Рассылку оповещений можно вполне делать через UDP по броадкасту... все остальное по TCP
P.S. UDP такой же стандарт как и TCP
pinokio (2004-01-12 11:42:00) [2]блин мне именно под 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-11 18:01:00) [3]Нефиг создавать две одинаковые темы - http://www.delphimaster.ru/cgi-bin/forum.pl?id=1073819731&n=4
>быстрее особенно если Thread'ы будеш пользовать
каким образом с потоками будет быстрее, если использовать все таки броадкаст? :)
cr (2004-01-11 17:42:00) [4]Я так понимаю ты TCP пользуеш ?
Это хорошо конечно но дико медленно попробуй
UDP и бродкаст-рассылки для локалки и этого
достаточно а работать будет раз в дцать
быстрее особенно если Thread'ы будеш пользовать.
pinokio (2004-01-11 16:10:00) [5]без TimeOut это занимае очень много времени как сделать быстрее
pinokio (2004-01-11 16:09:00) [6]Мне надо в цикле передать сообщение для компов
cr (2004-01-11 15:58:00) [7]зачем сканировать ?
клиент при попытке подключиться сначала шлет
бродкаст запрос по UDP например на 192.168.0.255
Сервера откликаются и шлют ему инфу ....