Mysql
 sql >> база данни >  >> RDS >> Mysql

Откриване на MySQL сървър в LAN чрез слушане на порт (Inno Setup)

За да проверите дали даден сървър слуша на порт, можете да използвате Winsock OLE контрол :

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;

Имайте предвид, че Winsock контролът изисква изпомпване на опашка от съобщения. Така че може да се наложи да деактивирате съветника, преди да стартирате проверката, за да попречите на потребителя да се забърква с формуляра.

Кредити:AppProcessMessage идва от Как да изпълня 7zip, без да блокирам потребителския интерфейс на InnoSetup?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създаване на матрица за съвместно възникване от mysql база данни в MYSQL, PHP или R

  2. Как да създам тази структура на масива в HTML форма?

  3. IN изявление в Eloquent

  4. Защо получавам, че MySQL сървърът е изчезнал изключение в Django?

  5. Как да покажа множество подредени колони за всеки период от време в подредена лента