![]() |
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: ![]() Zitat:
|
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? |
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:
(Natürlich ist das beim Programm noch mit Verschlüsselung etc.)
for i:=0 to memo1.count-1 do begin
Client.sendline('ml'+#0+memo1.lines[i]); end; 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! |
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:
3. Im OnReadytoSend Ereignis muss die Variable CanSend auf true gesetzt werden.
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; 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 22:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz