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

Вниз

Поиск в сети по диапазону адресов   Найти похожие ветки 

 
Kair ©   (2004-05-04 06:28) [0]

procedure Button1Click();
var
 i: Integer;
begin
ListBox1.Clear;
for i := x to y do
 begin
  ClientSocket1.Address := zzz + IntToStr(i);
  ClientSocket1.Open;
 end;
end;

procedure ClientSocket1Connect();
begin
Socket.Close;
end;

procedure ServerSocket1Connect();
begin
ListBox1.Items.Add(Socket.RemoteAddress);
end;

procedure ListBox1DoubleClick();
begin
ClientSocket2.Address := ListBox1.Items[zzz]; //это другой, второй, сокет
end;

Но вот если найдет кого-нибудь, то больше поиск проводить не удается,
Выводится сообщение, что: "Can"t change value while socket is active""
и показывает на строку после "ClientSocket1.Address := ".
Пробовал делать в обработчике Button1Click так: ClientSocket1.Close;
Но ошибка все-равно выходит...
Сделал проверку на активность: ShowMessage(BooleToStr(ClientSocket1.Active));
Сначала показывает "0", а после соединения "-1".


 
FireMan_Alexey ©   (2004-05-05 10:45) [1]

Дело в том, что ты используешь неблокирующий режим сокета! При этом после завершения процедуры Open никто не дает гарантии, что твой сокет уже законнектился к серверу(т.к. он находится в неблок. режиме)!
О коннекте к серверу извещает процедура OnConnect но в то время как твой сокет пытается коннектиться к серверу ты в цикле вызываешь еще один коннект и меняешь адрес, что нельзя делать ни в коем случае!
Я думаю, что тебе следует использовать таймер для твоего случая:

Procedure Timer;
Begin
 Client.Address:="127.0.0.1";
 Client.Port:=3128;
 Client.Open;
 Timer.Enabled:=False;
End;

Procedure OnError;
Begin
 Socket.Disconnect(Socket.SocketHandle);
 Error:=0;
 Timer.Enabled:=True;
End;

Procedure OnConnect;
Begin
 Socket.Disconnect(Socket.SocketHandle);
 Timer.Enabled:=True;
End;



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

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

Наверх




Память: 0.47 MB
Время: 0.039 c
14-1086449498
Sanek_metaller
2004-06-05 19:31
2004.06.27
Когда бутет Супер Кубок транслировать?


1-1087038493
guest_Dmitry
2004-06-12 15:08
2004.06.27
Стоит ли уничтожать динамически созданные компоненты?


4-1085116400
Alex
2004-05-21 09:13
2004.06.27
проблема с ShellExecute - не выполняет файл СРОЧНО


14-1086452954
AlexG
2004-06-05 20:29
2004.06.27
Воспитание детей...


11-1076154464
Sewix
2004-02-07 14:47
2004.06.27
Как узнать путь к программе на kol