Announcement

Collapse
No announcement yet.

ClientSocket: try open --> close

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

  • ClientSocket: try open --> close

    Hallo,<BR>ich habe da ein kleines Problem.<BR>Mein Programm soll über einen ClientSocket eine Verbindung zu einem Modul aufnehmen (try ClientSocket.Open), danach warte ich ein paar sekunden ob<BR>ClientSocket.Socket.Connected = True<BR>
    wenn nicht, dann schließe ich die Verbindung wieder (ClientSocket.Close).<BR>Trotzdem kommt nach ca. 1 Min. der Asynchrone Socketfehler 10060.<BR>Meine Fragen:<BR>Hat das Close keine Wirkung wenn noch keine Verbindung besteht?<BR>Kann nach dem Close die Verbindung trotzdem noch hergestellt werden?<BR>Wie kann ich den Socket wirksam schließen(auch wenn noch keine Verbindung aufgebaut wurde)?<BR>
    Grüße und Danke schonmal

  • #2
    Hallo,<br>hast du mal .active := false; probiert?<br><br>Michae

    Comment


    • #3
      Hallo nochmal.<BR>Ja habe ich, komme aber zum selben Resultat.<BR>Close sollte ja auch Active automatisch auf False setzen.<BR>Hier mal 'n paar Codeschnipsel:<PRE> try
      ClientSocket1.Open;
      except
      end;
      while i<10000 do
      begin
      if ClientSocket1.Socket.Connected=True then
      begin
      i:=10000;
      erx:=0;
      end
      else
      begin
      i:=i+1;
      erx:=1;
      end;
      end;
      if erx=0 then
      begin
      ClientSocket1.Socket.SendText(text1);
      Empfangen(nil); //Warte auf Antwort vom Modul, überprüfe CS und überprüfe gesetzten Wert
      end
      ClientSocket1.Close;
      </PRE>Mein problem ist halt, dass zwei Parteien den gleichen Port an diesem Modul benutzen müssen, und daher die Verbindung unbedingt geschlossen werden (bleiben) muss. Auch oder gerade dann, wenn die Verbindung kurzfristig nicht möglich ist,da die zweite Partei den Port grade geöffnet hat.<BR>Jen

      Comment


      • #4
        Hallo,
        <br>
        <br>try
        <br> clientsocket1.open;
        <br>except
        <br> exit;
        <br>end;

        <br>i := gettickcount;
        <br> while gettickcount < (i + 10000) do begin
        <br> if clientsocket1.connected = true then begin
        <br> ClientSocket1.Socket.SendText(text1);
        <br> Empfangen(nil); //Warte auf Antwort vom Modul, überprüfe CS und überprüfe gesetzten Wert
        <br> break;
        <br> end;
        <br> end;
        <br><br>end;

        <br>Du kannst doch mit deinem server mehrere clients gleichzeitig kontaktieren!<br>Ich würde dir ohnehin empfehlen die Indy Komponenten zu benutzen.
        <br>cu Michae

        Comment


        • #5
          Hallo,<BR>und danke erstmal für die Verbesserung. Ich bin halt noch'n ziemlicher Frischling.<BR>Das Problem ist, dass dieses Modul ein Gateway benutzt, welches nur einen Port öffnen kann. Darum muss die Verbindung zu diesem Modul von den beiden Stellen (PC und SPS) wechselweise genutzt werden. Aus diesem Grund ist das Close ja auch so wichtig.<BR>Gruß<BR>Jen

          Comment

          Working...
          X