![]() |
Indy 10 tcp client server demo
Liste der Anhänge anzeigen (Anzahl: 1)
unter
![]() unter ![]() unter ![]() Benutzung der Demo 3 "COMPLEX DEMO" wie folgt
Frage hier im Forum : in der DEMO 2C kann ich verschiedene Record senden und empfangen. Im Prinzip ist der identische Code in der Demo 3 eingebaut, nur in der Demo 3 kann ich kein Record vom Server im Client empfangen in der Demo 2C geht alles fehlerfrei. Was mache ich falsch, wo liegt der Fehler im Server in der DEMO 3 :( |
AW: Indy 10 tcp client server demo
Ps: gibt jetzt noch weitereb demos , Zb. record senden Stream zurück empfangen ....
geht alles prima, nur der Bug in DEMO 3 will sich nicht finden lassen warte immer noch auf Hilfe |
AW: Indy 10 tcp client server demo
Hi Bernhard,
habe mir gerade nur den Code im Server angeschaut und da sind mir auf Anhieb ein paar Probleme aufgefallen: - Im OnExecute des IndyServers muss der komplette Code Thread-Safe sein, weil er innerhalb des Conntext eines Threads abläuft, das bedeutet sämtliche VCL-Gui Zugriffe müssen Thread-Safe sein:
Delphi-Quellcode:
Geht so nicht. Auch der Zugriff auf gemeinsame Ressourcen muss geschützt sein,
Memo1.lines.add('blaBla');
Delphi-Quellcode:
BEnutzung des Bmps:
public
{ Public-Deklarationen } abmp: TBitMap; // <---- nicht Thread-Safe aMyRecordIndy: TMyThreadSafeRecord; // ^^ hört sich Thread Safe ein, aber wenn 2 Clients gleichzeitig connecten // und den Record benutzen, was passiert dann ?
Delphi-Quellcode:
// Jeder Client braucht sein eigenes Bmp !!
3:
begin /// Memo1.Lines.Add('record received AND JOB done!'); abmp.Height := 300; abmp.Width := 300; DrawRandomBitMap(abmp); ServerImage.Picture.Bitmap.Assign(abmp); Des Weiteren habe ich im SVN nicht die Units gefunden: Unit_Indy_Functions, Unit_Indy_Classes; Wenn die Function SendStream dort noch wie in den anderen Threads von Dir so existiert, das
Delphi-Quellcode:
Des Weiteren solltest Du solche Boolean Vergleiche lassen:
result := false;
try // sende ... // ... finally // ... end; result := true; // wird immer gesetzt, egal ob ein Fehler auftritt oder nicht
Delphi-Quellcode:
Einen letzten Tipp habe ich für Dich noch; Ich würde(so mache ich es meistens auf jeden Fall)
if (SendBuffer(AContext, LBuffer) = False) then // falsch, gibts genug Threads zu dem Thema
// richtig: if not (SendBuffer(AContext, LBuffer)) then ... eine Klasse TMyClient definieren diese pro Connection wie folgt verwenden:
Delphi-Quellcode:
Hoffe das bringt Dich ein wenig weiter,
// Im OnConnect
AContext.Data := TMyClient.Create; // Im OnDisConnect: If Assigned(AContext.Data) then begin if AContext.Data is TMyClient then TMyClient(AContext.Data).Free; AContext.Data := nil; // auf jeden Fall auf nil setzen, sonst versucht Indy das ganze freizugeben end; // Im OnExecute var myClient : TMyClient; begin // .... try myClient := TMyClient(AContext.Data); except myClient := nil; end; if Assigned(myClient) then begin // je nach Definition des TMyClients Object hast Du jetzt geschützte Ressouren pro Client // also Daten/Infos darein oder als lokale Var im OnExecute des Servers end; // ... Greetz Data |
AW: Indy 10 tcp client server demo
vielen vielen dank für die inputs !!!!!!!
im svn ordner shared ![]() ich habe aktuell über 100 downloads die woche, ich denke die delphi community sucht ganz dringend fehlerfreie examples für indy 10 und tcp ip server. |
AW: Indy 10 tcp client server demo
demo #3 will immer noch nicht :-(
habe alle debug Infomationsausgaben auf der Server.execute Seite
Delphi-Quellcode:
durch
Memo1.lines.add (...)
Delphi-Quellcode:
ersetzt.
...TIdNotify.NotifyMethod( .... )
Leider immer noch kein Erfolg. Ferner habe ich die Record definitionen Thread safe gemacht (siehe unten), kein Erfolg
Delphi-Quellcode:
Vom Debugging her:
TMyRECORDThreadSafeRecord = class(TIdThreadSafe)
value : TMyRecord; end; TINDYCMDThreadSafeRecord = class(TIdThreadSafe) value : TINDYCMD; end; der Client in der Demo 3 (Complex sample) spielt mit dem Server von der DEMO 2C wunderbar (Test um 2 verschiedenen Records zwischen Client und Server auszutauschen) Der Client von Demo 3 und der Server von Demo 3 können aber diese Records nicht austauschen obwohl der Code aus meiner Sicht identisch ist. Den String zu Übertragen klappt beim Server DEmo 3 . Auch BMP zeichen scheint zu spielen. Durch die Abänderungen von Oben müsste ich doch jetzt auch Thread safe sein ? Bin für jeden Input zum BugFixing Dankbar |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 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