Server online/offline



  • Hallo,

    ich würde gerne mit einem C++ WindowsProgramm kontrolieren ob verschiedene Dienste (z.B. Apache, MySQL, TS, IRC, FTP, ...) auf meinem Server online oder offline sind.
    bisher hab ich sowas immer in TCL geschrieben, aber nun wollte ich das ganz in C++ machen.
    Nur hab ich keine Ahnung wie ich eine Socket verbindung in C++ aufbauen kann.

    könnte mir das vllt. mal jemand anhand eines Beispieles mit den untenstehenden daten zeigen?
    Apache:
    IP: 123.123.123.123
    Port: 80

    Ich hab mir da ne Funktion vorgestellt, die 1 zurückliefert wenn der dienst online ist, und 0 wenn er offline ist.

    Währe euch sehr dankbar

    Weble



  • kannste auch selber machen. wie es geht steht im internet.



  • www.c-worker.ch

    und im winapi forum (bzw. dos/win32konsole forum) suchen.
    standard c++ ist der falsche ort.



  • thx, aber jetzt hab ich ein kleines problem:

    #include <winsock2.h>
    #include <windows.h>
    
    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2,2), &wsaData))
    {
      fehler = "WSAStartup() failed, %lu\n", (unsigned long)GetLastError();
      fehlercode->Lines->Add(fehler);
    } 
    else {
      fehlercode->Lines->Add("WSA gestartet");
    }
    struct sockaddr_in {
      short int		sin_family;  /* AF_INET     */
      unsigned short int	sin_port;    /* Port-Nummer */
      struct in_addr	sin_addr;    /* IP-Adresse  */
    };
    struct sockaddr_in addr;
    int s;
    s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (s == -1)
    {
      fehler = "socket() failed";
      fehlercode->Lines->Add(fehler);
    } else {
      fehlercode->Lines->Add("Socket erstellt");
    }
      addr.sin_addr.s_addr = inet_addr("127.0.0.1");
      addr.sin_port = htons(9900);
      addr.sin_family = AF_INET;
    if (connect(s, (sockaddr*) &addr, sizeof(addr)) == -1)
    {
      fehler = WSAGetLastError();
      fehlercode->Lines->Add(fehler);
    } else {
      fehlercode->Lines->Add("Verbindung hergestellt");
    }
    

    (Es wurde alles unnötige entfernt und nur das gepostet, das zum winsock gehört)

    naja ich bekomm folgendes:

    WSA gestartet
    Socket erstellt
    10014

    10014 == Bad address.

    Ich finde den Fehler einfach net 😞

    Weble



  • fehlercode->Lines->Add("WSA gestartet"); // sieht nicht nach einem fehler aus
    // ...
    int s = socket(AF_INET, SOCK_STREAM, 0);
    


  • thx

    der fehler lag vllt. auch an dem socket(AF_I.....

    aber der hauptfehler war woll der:

    if (connect(s, (sockaddr*) &addr, sizeof(addr)) == -1)
    

    so gehörts richtig:

    if (connect(s, (sockaddr*) &addr, sizeof(sockaddr)) == -1)
    


  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Weble schrieb:

    fehler = "WSAStartup() failed, %lu\n", (unsigned long)GetLastError();
    

    Wat'n dat? An der Stelle solltest du dir auf jeden Fall mal die Funktionsweise des Komma-Operators erklären lassen (oder gleich umsteigen auf sprintf())


Anmelden zum Antworten