网上找的例子
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.编译错误

解决方案 »

  1.   

    unit Unit1;interfaceuses
      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
    这样 运行也错误 :每个套接字只允许使用一次
      

  2.   

    本来这里try就是处理异常的么,你这样枚举端口当然是要抛出异常的咯!
      

  3.   

    这个要多线程来解决的哥们 给你直接写代码算了 给分走人
    主程序部分:
    主程序的  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;
      

  4.   

    忘记释放了
    try 
      tcp.Active:=true;
      tcp.free; 
      except 
      form1.ListBox1.Items.Add(IntTOStr(I)+'port opening');   tcp.Free; 
      end; 改成这样就对了  不过这种扫描方式很傻 还不如用syn方式扫描