Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IPWorks [Problem bei Übersetzung C++] WOULDBLOCK (https://www.delphipraxis.net/140407-ipworks-%5Bproblem-bei-uebersetzung-c-%5D-wouldblock.html)

Dragon27 17. Sep 2009 19:33


IPWorks [Problem bei Übersetzung C++] WOULDBLOCK
 
Hallo zusammen,

ich arbeite derzeit mit den IPWorks Komponenten und habe nun Probleme beim Senden und Empfangen wenn der Puffer voll ist.

Seit heute früh klicke ich mich durchs Internet um zu recherchieren wie ich diesen Fehler abfangen kann. Leider existiert
nur ein C(++) Code auf der Webseite. Diesen kann ich zwar teilweise erfassen aber ich komme in der Beziehung nicht klar das
ganze in Delphi umzusetzen.

Den Support von /n Software habe ich ebenfalls kontaktiert. Leider mit einer nicht so ganz tollen Antwort in der angedeutet
wurde, dass die Lösung ganz leicht wäre ... ja aber wie? Das schreiben sie nicht.

Vielleicht kann mir von Euch einer helfen. Danke!

Link zum C(++)Code:http://nsoftware.com/kb/showentry.aspx?entry=06170413

Zitat:

(von /n Software)
Also note that if the Timeout property is set to a positive value, all WOULDBLOCK errors are handled internally rather than failing with the error.
(Timeout ist bei mir 0)

sirius 17. Sep 2009 19:43

Re: IPWorks [Problem bei Übersetzung C++] WOULDBLOCK
 
Der Socket Fehler WouldBlock ist eigentlich kein Fehler, sondern nur die Nachricht, dass man erstmal warten soll (entweder weil beim Empfangen noch nichts zum Empfangen da ist, oder weil beim Senden der Socket auf Grund von bspw. vollem Buffer grad nicht senden kann.

Und was genau ist das Problem?
Willst du den Fehler abfangen, aber die Komponenten rücken ihn nicht heraus, weil sie selber damit arbeiten oder fragst du wie du einen try..except Block um SetDataToSend legst?

Dragon27 17. Sep 2009 19:47

Re: IPWorks [Problem bei Übersetzung C++] WOULDBLOCK
 
Erstmal danke für deine Antwort!

Also bei mir ist das so, dass der Client diesen Fehler(Puffer voll) bekommt und der Server dann abstürzt. Bei den
IP-Works Komponenten sende ich immer Zeile für Zeile ein Memo.

Also nach dem Muster:

Delphi-Quellcode:
for i:=0 to memo1.count-1 do begin
  Client.sendline('ml'+#0+memo1.lines[i]);
end;
(Natürlich ist das beim Programm noch mit Verschlüsselung etc.)

Mein Prblem ist, dass ich nicht verstehe wie der Client/Server warten kann bis der Puffer leer ist bzw. ob man den Puffer nicht vergrößern kann.

Danke!

Dragon27 17. Sep 2009 21:30

Re: IPWorks [Problem bei Übersetzung C++] WOULDBLOCK
 
So, Probelm gelöst....

1. Globale Variable deklarieren (CanSend:Boolean)
2. Wenn Daten gesendet werden sollte das ganze so aussehen:

Delphi-Quellcode:
      try
        Client.DataToSend:='TEXT'+#10;
      except
        Cansend:=false;
      while Cansend=false do begin
         Client.DoEvents;
      end;
       if Cansend=true then begin
         Client.DataToSend:='TEXT'+#10;
       end;
      end;
3. Im OnReadytoSend Ereignis muss die Variable CanSend auf true gesetzt werden.

Falls trotzdem jemand einen Verbesserungsvorschlag hat immer her damit ;-). Auf alle Fälle funktioniert es bei mir so.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz