网上找的例子
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;type
TForm1 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1:=TServerSocket.Create(self);
ServerSocket1.Active:=true;
end;procedure TForm1.Button1Click(Sender: TObject);
var I : integer;
begin
ListBox1.Items.Clear;
for I := 0 to 10000 do
begin
ServerSocket1.Close;
ServerSocket1.Port := I;
try
ServerSocket1.Open;
except
ListBox1.Items.Add(IntTOStr(I)+'port opening');
end;
end;
ServerSocket1.Free;
end;
end.编译错误
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;type
TForm1 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1:=TServerSocket.Create(self);
ServerSocket1.Active:=true;
end;procedure TForm1.Button1Click(Sender: TObject);
var I : integer;
begin
ListBox1.Items.Clear;
for I := 0 to 10000 do
begin
ServerSocket1.Close;
ServerSocket1.Port := I;
try
ServerSocket1.Open;
except
ListBox1.Items.Add(IntTOStr(I)+'port opening');
end;
end;
ServerSocket1.Free;
end;
end.编译错误
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;type
TForm1 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
ServerSocket1: TServerSocket;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1:=TServerSocket.Create(self);
ServerSocket1.Active:=true;
end;procedure TForm1.Button1Click(Sender: TObject);
var I : integer;
begin
ListBox1.Items.Clear;
for I := 0 to 10000 do
begin
ServerSocket1.Close;
ServerSocket1.Port:=I;
try
ServerSocket1.Open;
except
ListBox1.Items.Add(IntTOStr(I)+'port opening');
end;
//ServerSocket1.Free;
end;
end;
//ServerSocket1.Free;
en
这样 运行也错误 :每个套接字只允许使用一次
主程序部分:
主程序的 dk.Create(false); 就是创建线程 然后用while等待线程工作完毕
var
Form1: TForm1;
pt:integer;
st:bool;
implementation
uses unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
st:=true;
for I := 1 to 65535 do
begin
st:=true;
try
pt:=i;
dk.Create(false);
except
end;
while st=true do
begin
end;
end;
showmessage('工作完成');
end;
你要新创建一个线程 线程主要代码如下
线程部分:
procedure dk.Execute;
begin
tcp:=Tserversocket.Create(nil);
tcp.Port:=pt; try
tcp.Active:=true;
except
form1.ListBox1.Items.Add(IntTOStr(I)+'port opening'); tcp.Free;
end;
st:=false;
end;
try
tcp.Active:=true;
tcp.free;
except
form1.ListBox1.Items.Add(IntTOStr(I)+'port opening'); tcp.Free;
end; 改成这样就对了 不过这种扫描方式很傻 还不如用syn方式扫描