Announcement

Collapse
No announcement yet.

Wie kann folgender Socket-Fehler unterdrückt werden?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie kann folgender Socket-Fehler unterdrückt werden?

    Frohe Ostern!

    Ich verwende eine Client-Socket-Komponente über die ich versuche verschiedene Server zu errreichen. Dabei werden die Eigenschaften wie z.B. die IP-Adresse des Servers in einer Schleife, die in einem OnTimer-Ereignis abläuft jedesmal ausgetauscht. Oft kommt es vor, dass statt einer IP-Adresse eine DNS (z.B. schnarke.redirectme.net) für die Eigenschaft Client.Host gesetzt wird. Wenn mein Rechner online ist funktioniert das Erreichen des Servers mittels DNS einwandfrei. Bin ich jedoch offline versucht der Client einige Male eine Verbindung herzustellen. Dann erhalte ich folgende Fehlermeldung: Im Projekt ...exe ist eine Exception der Klasse ESocket_Error aufgetreten Meldung: 'Windows-Socket-Fehler: Der angeforderte Name ist gültig und wurde in der Datenbank gefunden. Er verfügt jedoch nicht über die richtige zugeordneten DAten, die ausgewertet werden sollen (11004), auf API 'ASync Lookup". Prozeß wurde angehalten...

    Ich habe keine Ahnung was mir diese FEhlermeldung sagen will, noch wie ich sie unterdrücken kann und den Client dazu bewegen kann, dass er den nächsten Server versucht zu erreichen. Vielleicht kann mir ja jemand helfen. Ich hab die gesamte letzte Nacht versucht dieses Problem in den Griff zu bekommen, jedoch vergebends. Jetzt verzweifle ich halbwegs.

    Viele Grüße und noch ein frohes Osterfest,
    Marco

  • #2
    Was passiert denn, wenn Du im OnError einfach errorcode:=0 setzt

    Comment


    • #3
      Das ist es ja. Mit OnError := 0 ist der Fehler nicht zu unterdrücken. Der wechsel des Parameters Client-Host in einer Schleife funktioniert merkmwürdiger Weise auch nicht. Ich habe das ganze dann in ein OnTime-Ereignis gepackt und wechsel dort den Client.Host aus. Warum das ganze nicht funktionirt kann ich absolut nciht verstehen. Es scheint wohl an der Verwendung des einer DNS als Client.Host-Parameter zu liegen. Wenn ich eine IP eintrage und diese nciht erreichbar ist, kann ich das mit einem OnError-Ereignis abfangen und das Programm versucht weiterhin den Host zu erreichen. Mir scheint, als würden DNS probleme machen, wenn der Client nicht im Internet eingewählt ist. Wie könnte ich denn programmtechnisch prüfen ob ich online bin? Das Programm könnte ich dann so steuern, dass die Host-Connections nur dann durchgeführt werden wenn der Client im Internet steht.

      Viele Grüße,
      Marc

      Comment


      • #4
        Folgendes funktioniert z.B. nicht:<br><br>

        for i := 1 to Anzahl_Clients do<br>
        beginn
        <Pre> Client.Close;
        Client.Host := ClientList[2,Anzahl_Clients];
        Client.Open;</Pre>
        end

        Comment


        • #5
          Ich müsste doch eigentlich nur prüfen ob der Client im Internet ist oder nicht, bevor ich den Verbindungsaufbauversuch zu den einzelenen Servern versuche zu inizieren. Nur wie mache ich das am besten? Habe mir überlegt eine Webbrowser-Komponente zu nehmen und mit dieser dann eine Seite aufzurufen. Wird die Seite ordungsgemäß geladen bin ich online. Wenn eine Fehlerseite erscheint bin ich offline. Das ganze würde ich natürlich unbemerkt für den User machen, quasi unsichtbar. Oder gibt es da noch eine andere Möglichkeit? Kann sich wirklich niemand erklären warum der von mir oben beschriebene Fehler auftaucht und wie man ih unterdrücken kann? Warum funktioniert der Wechsel des Hosts in einer SChleife nciht?

          Gruß,
          Marc

          Comment


          • #6
            Hallo,

            schade das niemand eine Lösung für mein Problem weiß. Da mein Programm wunderbar funktioniert sobald ich mit dem Client online im Internet stehe, gibt es kein Problem. Sobald mein Programm gestart wird, müsste es im Form.Create prüfen ob der Client online ist oder nicht. Nicht zu verwechseln mit einer Netzwerkverbindung! Das ganze soll auch ber einen Router funktionieren. Daraus schließe ich, dass ich um die Prüfung durchzuführen, nur einen Ping an einen Server (z.B. google.de) senden muss und das Ergebnis auswerte. Sollte der Ping negativ ausfallen müsste einfach eine User-Meldung erscheinen das er gerade offline ist und das Programm müsste sich nach Bestätigung der Meldung schließen. Würde ich es nicht schließen, stürzt mein Programm ab, da alle Client.Host mit einer DNS zu dem oben beschriebenen Fehler führen würden. Für den User sieht es zwar so aus als wenn das Programm ordnungsgemäß läuft, aber in wirklichkeit hängt es. Wenn er dann online gehen würde, erfüllt das Programm seinen Zweck nciht mehr. Der Anwender merkt es allerdings nicht. Das Programm müsste von ihm neu gestartet werden sobald er online ist damit es seinen Zweck erfüllt. Falls mir jemand folgen kann würde ich mich über Ratschläge sehr freuen. Danke!

            Gruß,
            Marc

            Comment

            Working...
            X