Форум: "Сети";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];
ВнизПоиск в сети по диапазону адресов Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.052 c