Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

Delphi socket

Hello All,

Не подскажет ли кто. почему не работает следующая функция? В ComboBox1
IP адреса возможных серверов.
Если первый адрес коректен, все нормально, если нет то сплошные
ошибки.

procedure TForm1.Conect;
var
i:byte;
c:Boolean;
begin
c:=false;
for i:=0 to ComboBox1.Items.Count-1 do begin
ClientSocket1.Address:=ComboBox1.Items.Strings[i];
try
ClientSocket1.Active:=true;
except
ClientSocket1.Active:=false;
Continue;
end;
C:=true;
Break;
end;
if not c then begin
ShowMessage('Не удается подключится к серверу');
Exit;
end;
PageControl1.ActivePageIndex:=1;
end;

Заранее благодарен.

Ответить   Sun, 20 Jun 2004 22:30:16 +0700 (#173987)

 

Ответы:

Здоровеньки булы, monah!

20 июня 2004 г., воскресенье, 20:30:16 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "Delphi socket",
в котором сообщалось следующее:

Лень мне разбираться, так что просто посмотри (сканер портов):
unit Unit2;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, ScktComp, ExtCtrls;
type
TForm2 = class(TForm)
Memo1: TMemo;
Panel1: TPanel;
Panel2: TPanel;
Button1: TButton;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
GroupBox2: TGroupBox;
Edit3: TEdit;
GroupBox3: TGroupBox;
Label3: TLabel;
Label4: TLabel;
Edit4: TEdit;
Edit5: TEdit;
Panel3: TPanel;
ProgressBar1: TProgressBar;
ProgressBar2: TProgressBar;
GroupBox4: TGroupBox;
Edit6: TEdit;
ClientSocket1: TClientSocket;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;

var Form2: TForm2;
Rez11: Boolean = false;
Bool: Boolean = false;

implementation

{$R *.DFM}

//Close Scaner
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// если запущен, то прерываем процесс
if not Rez11 then exit;
Action := caNone;
Button1Click(Sender);
if not Rez11 then Action := caHide;
end;
// Включить/отключить сканер
procedure TForm2.Button1Click(Sender: TObject);
var I, J, K: Integer;
DopStr: String;
begin
if Rez11 then
begin
if Application.MessageBox('Прервать сканирование?', 'Сканер', mb_YesNo
+ mb_IconQuestion) = idYes then
begin
Rez11 := false;
Bool := false;
end;
end
else
begin
// запуск сканера
if StrToInt(Edit2.Text) < StrToInt(Edit1.Text) then
begin
Application.MessageBox('Неверно указан диапазон для портов', 'Сканер',
mb_Ok + mb_IconStop);
exit;
end;
if StrToInt(Edit5.Text) < StrToInt(Edit4.Text) then
begin
Application.MessageBox('Неверно указан диапазон IP-адресов', 'Сканер',
mb_Ok + mb_IconStop);
exit;
end;
Caption := 'Идет сканирование...';
Memo1.Lines.Clear;
try
DopStr := trim(copy(Edit3.Text, 1, length(Edit3.Text) - 2));
Rez11 := true;
Button1.Caption := 'Отмена';
Memo1.Lines.Add('-------------'#13#10'===========');
// начальные значения для порта и адреса
I := StrToInt(Edit1.Text);
J := StrToInt(Edit4.Text);
try
ProgressBar1.Max := StrToInt(Edit2.Text) - StrToInt(Edit2.Text) +
1;
ProgressBar1.Position := 0;
ProgressBar2.Max :=StrToInt(Edit5.Text) - StrToInt(Edit4.Text) + 2;
ProgressBar2.Position := 1;
// цикл по адресам
while I <= StrToInt(Edit2.Text) do
begin
J := StrToInt(Edit4.Text);
// цикл по портам
while J <= StrToInt(Edit5.Text) do
begin
Application.ProcessMessages;
if not Rez11 then break;
ClientSocket1.Active := false;
ClientSocket1.Port := I;
ClientSocket1.Address := trim(DopStr) + '.' + trim(IntToStr(J));
try
// попытка соедениться
ClientSocket1.Active := true;
Application.ProcessMessages;
// время ожидания
Bool := true;
K := round(StrToFloat(Edit6.Text) * 1000 / 5);
while K > 0 do
begin
Sleep(5);
Application.ProcessMessages;
dec(K);
end;
try
ClientSocket1.Active := false;
except
end;
except
end;
Application.ProcessMessages;
ProgressBar2.Position := ProgressBar2.Position + 1;
inc(J);
end;
inc(I);
Application.ProcessMessages;
if not Rez11 then break;
ProgressBar1.Position := ProgressBar1.Position + 1;
end;
ProgressBar2.Position := ProgressBar1.Position + 1;
ProgressBar1.Position := ProgressBar1.Position + 1;
except
Application.MessageBox('Ошибка выполнения операции', 'Сканер', MB_ok
+ mb_IconStop);
end;
Button1.Caption := 'Сканер';
ProgressBar1.Position := 0;
ProgressBar2.Position := 0;
Caption := 'Сканер по адресам и портам';
if Rez11 then
begin
Application.MessageBox('Процедура сканирования по адресам и портам
закончена.', 'Сканер', mb_Ok + mb_IconAsterisk);
Memo1.Lines.Add('-----------------'#13#10'ВСЕ АДРЕСА
И ПОРТЫ ОТСКАНИРОВАНЫ'#13#10#13#10);
Rez11 := false;
end
else Memo1.Lines.Add('------------'#13#10'ПРЕРВАНО
НА порт-' + IntToStr(I) + ', адрес-' + trim(DopStr) + '.' + IntToStr(J - 1) +
#13#10#13#10);
except
Application.MessageBox('Ошибка инициализации процесса.', 'Сканер', mb_Ok
+ mb_IconStop);
end;
Caption := 'Сканер по адресам и портам';
end;
end;
// Есть ответ сервера
procedure TForm2.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);
begin
// если соеденились вывести сообщение
Memo1.Lines.Add('***'#13#10'Порт: ' + IntToStr(ClientSocket1.Port) + ' Адрес:
' + ClientSocket1.Address + ' - ЕСТЬ ОТВЕТ'#13#10);
Application.ProcessMessages;
// прервать время ожидания
try
ClientSocket1.Active := false;
except
end;
Bool := false;
end;
// Ошибка при соединении
procedure TForm2.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
// прервать время ожидания если ошибка
ErrorCode := 0;
Bool := false;
end;

end.

Ответить   Томилов Александр Mon, 21 Jun 2004 22:53:15 +0500 (#175013)