Seite 1 von 1

Timeout beim Aufbau einer Netzwerkverbindung

Verfasst: Mo Apr 09, 2012 9:07 pm
von Kmitska
Hallo Leute,

also ich versuch mal jetzt mein Code zu zeigen. :-)

Code: Alles auswählen

bool val = false;
    if(User.ssl_pop == true){
        val = checkServer(User.popServer, 995);
    }else{
        val = checkServer(User.popServer, 110);
    }
    if(val == false){
        text = new wxStaticText(panel, wxID_ANY ,wxT("Login failed"), wxPoint(10,0));
    }
Die Funktion checkServer(); erwartet einen String als Antwort vom Server, aber wenn es keine Verbindung aufbauen kann bleibt es hängen und es passiert nichts.
Wie kann ich das machen, also das es überprüft? Will ja sozusagen den Server "anpingen".

Die Funktion:

Code: Alles auswählen

bool checkServer(string address, int port)
{
    Socket request;
    request.create();
    request.connect(address, port);

    string response;

    request.recv(response);
    if(response[0] == '+'){
        request.send("quit\n");
        request.close();
        return true;
    }
    request.close();
    return false;
}
Passender Titel (dani93)

Re: Wie überprüfe ich das?

Verfasst: Mo Apr 09, 2012 9:16 pm
von cloidnerux
Ich bin es egt gewohnt, dass es TimeOut-Zeiten gibt, sprich man angibt, wie lange man warten will bevor eine Verbindung als gescheitert angesehen werden soll. Da du das anscheinend so nicht machen kannst solltest du vlt asynchrone Verbindungen nutzen oder die Funktion in nen thread packen und dann einfach eine gewisse Zeit warten und dann prüfen, ob eine Antwort eingetroffen ist.
Also im Endeffekt läuft es für dich hier auf threads hinaus, also du lagerst die Funktionalität in einen eigenen Prozess, sodass du im Hauptprozess nicht darauf warten musst.

Re: Wie überprüfe ich das?

Verfasst: Mo Apr 09, 2012 9:36 pm
von Kmitska
So hatte ich es auch vor, wollte nur wissen, ob es auch andere Alternativen gibt.
Danke.

Re: Timeout beim Aufbau einer Netzwerkverbindung

Verfasst: Mo Apr 09, 2012 10:59 pm
von nufan
Bitte versuche passende Titel für deine Forenbeiträge zu verwenden. "Wie überprüfe ich das?" ist nichtssagend und kann für jedes mögliche Problem stehen. Wenn jemand nach deinem Problem sucht, wird er es bestimmt nicht unter diesem Namen finden.

Nun zum eigentlichen Thema. Dieser Code allein reicht leider nicht. Welche Netzwerk-Bibliothek verwendest du? Für die Oberfläche sehe ich eine wxWidgets-Funktion. Die Klasse "Socket" hast du bestimmt selbst geschrieben und ich hab keine Ahnung wie "connect()" funktioniert, weil du die Klasse nicht zeigst. Solange du nicht mehr Informationen bietest, kann dir hier auch niemand helfen. Ich kann nur raten: "Socket" ist ein Wrapper um "wxSocketClient". Ein Blick in die wxWidgets-Referenz und ich finde die Methode "WaitOnConnect()".
http://docs.wxwidgets.org/trunk/classwx ... 0b60e92d74
In der Funktionsbeschreibung findest du bereits einen Code, der fast genau das macht was du willst.