sql >> Databasteknik >  >> RDS >> Mysql

MySQL-serverupptäckt på LAN genom lyssningsport (Inno Setup)

För att kontrollera om en server lyssnar på en port kan du använda Winsock OLE-kontroll :

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;

Observera att Winsock styrning kräver pumpning av meddelandekö. Så du kan behöva inaktivera guiden innan du kör kontrollen, för att förhindra att användaren bråkar med formuläret.

Krediter:AppProcessMessage kommer från Hur kör man 7zip utan att blockera InnoSetup UI?



  1. MySQL Wildcard för =- finns det ett

  2. Gå igenom en lista med tabellkolumner och tillämpa en fråga på dem

  3. Kan inte skicka parameter genom referens i MySQLi

  4. Hur hanterar jag sökfråga med japanska med MySql?