用except捕获
try 
  socket.active = true;
  Result := 端口打开 ;
except
  Result := 端口没打开;
  rasie ;
end

解决方案 »

  1.   

    你说的是指服务器上的TCP/IP端口么?
    用TClientSocket Connect至此端口,如果Connect成功,则此端口打开。如果产生了 ESocketError exception(Error no:10061), 则此端口未打开。
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ScktComp;type
      TForm1 = class(TForm)
        ClientSocket1: TClientSocket;
        testport: TButton;
        procedure testportClick(Sender: TObject);
        procedure ClientSocket1Connect(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
          ErrorEvent: TErrorEvent; var ErrorCode: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.testportClick(Sender: TObject);
    begin
      with ClientSocket1 do
      begin
        Close;
        Host := 'servername';//servername为要检测的服务器服务器名
        Port := 10000;//10000为要检测的服务器端口
        Open;  end;end;procedure TForm1.ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
      showmessage(format('服务器%s上的端口%d已打开',[ClientSocket1.host,ClientSocket1.port]));
    end;procedure TForm1.ClientSocket1Error(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    begin
      showmessage(Format('无法连接服务器%s的端口%d',[ClientSocket1.host,ClientSocket1.port]));
      ErrorCode := 0;
    end;end.
      

  3.   

    >>procedure TForm1.ClientSocket1Error(Sender: TObject;
    >>  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
    >>  var ErrorCode: Integer);
    >>begin
    >>  showmessage(Format('无法连接服务器%s的端口%d',[ClientSocket1.host,ClientSocket1.port]));
    >>  ErrorCode := 0;
    >>end;Connect连接失败的原因有多种,只有当Errcode = 10061 时才能表明服务器端口未打开。