Announcement

Collapse
No announcement yet.

TClientSocket Open funktioniert nicht

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

  • TClientSocket Open funktioniert nicht

    Hallo,
    ich benutze den Builder C++ 5 und schreibe eine TCP-Anwendung.

    In dem Netzwerk sind über einen switch zwei Server und mein Client verbunden. Es ist immer nur ein Server aktiv beide Server haben die gleiche IP-Adresse. Tritt bei einem Server ein Fehler auf übernimmt der zweite Server. In diesem Fall erkennt mein Client den neuen Server nicht.

    Ich hatte bisher nur die Eigenschaft Active verwendet dann in der Hilfe gelesen: "Mit Open wird die Socket-Verbindung initialisiert. Die Eigenschaft Active wird dabei auf true gesetzt. Bei Client-Sockets sucht Open nach einem Server und übernimmt den Verbindungsaufbau." Das funktioniert leider nicht.

    Im Debug habe ich einen Haltepunkt nach dem Open gesetzt und bekomme die Anzeige: "ClientSocket->Open = E2027 Eine Speuicheradresse muss verwendet werden" wenn ich den Cursor auf Open setze.

    Das sagt mir leider nichts. Was mache ich falsch?

    Danke
    Dieter
    Mache Software wird nie fertig. Man muss sie für fertig erklären.

  • #2
    Hallo Evi48,

    funktioniert denn der Ping? Die Antwort bist Du bisher schuldig geblieben...

    Grüße Joche

    Comment


    • #3
      Hallo Jochen,

      das Problem ist ich kann das Netzwerk hier nicht zum Test aufbauen. Die Anlage steht in der Altmark und ich habe im Moment keinen Zugriff.
      Mit meinen Mitteln hier kann ich den Fehler nicht reproduzieren, dee Verbindungsaufbau funktioniert und ich versuche nun mit Open und Close mein Glück und nicht mit dem setzen der Eigenschaft Active.

      Gruß
      Diete
      Mache Software wird nie fertig. Man muss sie für fertig erklären.

      Comment


      • #4
        Hallo Dieter,

        fängst Du die entstehnden Fehler ab? Wenn nicht, versuch mal im OnError-Ereignis des Client-Socket:
        <PRE>
        ClientSocket1->Close();
        ErrorCode = 0;
        </PRE>

        Grüße Joche

        Comment


        • #5
          Hallo Jochen,

          ja die Fehler frage ich ab. Aber der oben angegebene Fehler ist eine Meldung die im Debaug angezeigt wird wenn man den Cursor auf den Funktionsnamen "Open" stellt. So als wenn man den Wert einer Variablen im Debug anzeigen möchte.

          Gruß
          Diete
          Mache Software wird nie fertig. Man muss sie für fertig erklären.

          Comment


          • #6
            Hi,´

            Open ist eine Funktion, keine Eigenschaft, deswegen kannst Du im Debugger Open nicht abfragen.

            Markier mal den gesamten Ausdruck, anstatt nur das Open, die Fehlermeldung sollte dann verschwinden, obwohl Du auch weiterhin keine Information geliefert bekommst, da Open zu diesem Zeitpunkt noch nicht ausgeführt wurde.

            Grüße Joche

            Comment


            • #7
              Hallo Jochen,

              der Haltepunkt ist nach dem Durchlaufen der Funktion ClientSocket->Open(); wenn ich jetzt den Aufdruck ohne "();" makiere bekomme ich die Meldung. Einen Wert kann ich hier sicher nicht bekommen. Was mich aber absolut verwirrt ist, dass

              ClientSocket->Active = true;

              nach dem Open ohne Fehlermeldung durchlaufen wird Active aber nicht gesetzt wird.

              Leider muss ich jetzt bis einschliesslich Donnerstag an eine andere Aufgabe und kann mich nicht intensiv um dieses Problem kümmern bleibe aber am Ball.

              Danke bis später
              Diete
              Mache Software wird nie fertig. Man muss sie für fertig erklären.

              Comment


              • #8
                Hallo Dieter,

                nun ja, ob Du nun Open() oder Active verwendest ist relativ egal. Aber wenn das Eine nicht funktioniert, warum sollte das Andere funktionieren?

                Das Active = true kannst Du Dir sparen, das wird in der Open() ebenfalls gesetzt.

                In der OnError()-Methode wird Dir aber ein Fehlercode übergeben. Schau da doch mal nach.

                Grüße Joche

                Comment


                • #9
                  Guten Morgen Jochen,

                  verwende ich nur Active bekomme ich hier im Testaufbau immer Verbindung. Verwende ich Open so wie es in der Hilfe steht bekomme ich keine Verbindung und Active wird auch nicht gesetzt.

                  Sobald OnError von TClientSocket ausgelöst wird gebe ich den Errorcode in einem Memo aus doch da kommt leider nichts.

                  Ich werde wohl umbauen müssen und eine eigene Open und Close Funktion schreiben in der ich mit NEW den ClientSocket zur Laufzeit generiere oder delete. Dann sollte doch gewährleistet sein dass ganz sicher nach einem Server gesucht wird.

                  Einen angenehmen Tag
                  Diete
                  Mache Software wird nie fertig. Man muss sie für fertig erklären.

                  Comment


                  • #10
                    Hallo Dieter,

                    in der Hilfe zu Open() steht aber doch, dass Open() nach dem Server sucht und Active auf true setzt... Ich verstehe nicht, warum Active funktioniert, aber nicht Open()?!?

                    Ich hab aber auch nicht viel mit Sockets gemacht, vielleicht weiß jemand hier mehr...

                    Grüße Joche

                    Comment


                    • #11
                      Hallo Jochen,

                      ja genau das ist mein Problem in der Hilfe steht es, nur funktionieren will es nicht und ich weiss nicht warum oder was ich falsch mache.

                      Gruß

                      Diete
                      Mache Software wird nie fertig. Man muss sie für fertig erklären.

                      Comment


                      • #12
                        Hallo Zusammen,

                        und hier ist die Lösung:

                        TClientSocket hat auch Eigenschaften, die nur zur Laufzeit gestzt werden können. Hierzu gehört "Address". Zur Entwicklungszeit steht nur die Eigenschaft "Host" zur Verfügung.

                        Host sollte nur den Namen des gesuchten Rechners enthalten und nicht die IP-Adresse. Offensichtlich findet der Client auch dann den Rechner wenn hier die IP-Adresse eingetragen ist aber nur während des Programmstarts. Address enthält die IP-Adresse.

                        Bei dieser Einstellung funktioniert auch das Open wie in der Hilfe beschrieben.

                        Ob nun auch mein ursprüngliches Problem gelöst ist wird sich ende November herausstellen.

                        Danke für die Hilfe

                        Diete
                        Mache Software wird nie fertig. Man muss sie für fertig erklären.

                        Comment

                        Working...
                        X