sql >> Database teknologi >  >> RDS >> Mysql

MySQL-serveropdagelse på LAN ved lytteport (Inno Setup)

For at kontrollere, om en server lytter på en port, kan du bruge Winsock OLE kontrol :

type
  TSocketState =
    (sckClosed, sckOpen, sckListening, sckConnectionPending, sckResolvingHost,
     sckHostResolved, sckConnecting, sckConnected, sckClosing, sckError);

type
  TMsg = record
    hwnd: HWND;
    message: UINT;
    wParam: Longint;
    lParam: Longint;
    time: DWORD;
    pt: TPoint;
  end;

const
  PM_REMOVE = 1;

function PeekMessage(var lpMsg: TMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax,
  wRemoveMsg: UINT): BOOL; external '[email protected] stdcall';
function TranslateMessage(const lpMsg: TMsg): BOOL;
  external '[email protected] stdcall';
function DispatchMessage(const lpMsg: TMsg): Longint;
  external '[email protected] stdcall';

procedure AppProcessMessage;
var
  Msg: TMsg;
begin
  while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do
  begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;
end;

function CheckPort(Host: string; Port: Integer): Boolean;
var
  Socket: Variant;
begin
  Socket := CreateOleObject('MSWinsock.Winsock');
  Socket.RemoteHost := Host;
  Socket.RemotePort := Port;
  Socket.Connect;

  { Winsock requires message pumping }
  while not (Socket.State in [sckConnected, sckError]) do 
  begin
    AppProcessMessage;
  end;

  Result := (Socket.State = sckConnected);

  if Result then
  begin
    Log(Format('Port %d on %s is open', [Port, Host]));
  end
    else
  begin
    Log(Format('Port %d on %s is NOT open', [Port, Host]));
  end;
  Socket.Close;
end;

Bemærk, at Winsock kontrol kræver pumpning af beskedkø. Så du skal muligvis deaktivere guiden, før du kører kontrollen, for at forhindre brugeren i at rode med formularen.

Krediter:AppProcessMessage kommer fra Hvordan udfører man 7zip uden at blokere InnoSetup UI?



  1. Microsoft Access-memo-datatype til MySQL-datatype

  2. Hvordan tæller man kolonnerne i en MySQL-forespørgsel, når antallet af returnerede kolonner er dynamisk?

  3. SQL Server 2000-ækvivalent for ON DUPLICATE KEY?

  4. Brug udvælgelsesforespørgsel i Indsæt forespørgsel til det samme tabelnavn