suche alternative zu TServer-/Clientsocket
-
hallo!
ich arbeite momentan mit TServer-/Clientsocket vom c++ builder. unter optimalen bedingungen funktionieren die auch halbwegs nur habe ich das gefühl, dass diese komponenten nicht wirklich stabil laufen. auch der durchsatz ist nicht wirklich berauschend, was aber auch an meinem programm liegen könnte.
jetz bin ich gerade auf der suche nach einer alternative. da bin ich auf die indy komponenten gestoßen (TldTCPClient). da es hier keine solchen events zum lesen (OnRead bei TClientSocket) gibt, komm ich damit nicht ganz klar. die hilfe und demos sind meiner meinung etwas dürftig und bei delphi kenn ich mich schon gar nicht aus.hat jemand erfahrungen mit indy komponenten oder etwas besseres. mein ziel ist es binäre daten byteweise von meinem mikrocontroller zu empfangen.
bin in einer ziemlichen zeitnot, deswegen tut es mir lei falls es schon massenweis artikel dazu gibt, aber indy wird anscheinend generell wenig verwendet und sonst fällt mir nichts ein wonach man suchen könnte.
lg
meister123
-
Auch auf die Gefahr hin, mir schon wieder ein Hinweis einzufangen, dass ich auf die Hilfe verweise -> In der Hilfe zu der Komponente nachlesen. Dort gibt es BeginWork als Ereignis. Das Dinf unterscheidet zwischen senden und empfangen. Im Unterschied zu den anderen Komponenten gibt es hier ein Ereignis für beide Fälle.
-
soweit ich das mitbekommen habe wird OnWork erst aufgerufen wenn tatsächlich etwas gelesen oder geschrieben wird.
ich möchte eine funktion die aufgerufen wird, sobald daten zur verfügung stehen. muss ich da jetzt einen thread erstellen und ReadBuffer() in einer endlosschleife parallel zu meinem programm laufen lassen?
-
meister123 schrieb:
ich arbeite momentan mit TServer-/Clientsocket vom c++ builder. unter optimalen bedingungen funktionieren die auch halbwegs nur habe ich das gefühl, dass diese komponenten nicht wirklich stabil laufen.
Meisterhaftes Urteil. ... mir unverständlich woher nur diese ewige Arrgoanz heutzutage kommt, immer den Fehler zuerst in der Library zu suchen ...
Ich kann dich beruhigen. Die Komponenten sind absolut stabil. Was wiederum impliziert, dass dein meisterhaftes Programm die Ursache für die Instabilität ist.. Aber vielleicht ergötzt du uns ja an einigen Details was du genau unter "nicht stabil laufen" verstehst?
-
1. habe ich nicht behauptet, dass diese komponenten fehlerhaft sind und auch mein programm davon nicht ausgeschlossen. bei der fehlersuche ist es naheliegend, dass man auch alternative wege berücksichtigt.
2. brauch ich mich hier nicht verarschen zu lassen, auch wenns von sogenannten moderatoren geschieht. tut mir leid wenn ich nicht da über-drüber-genie bin. zum ergötzen wird es hier jedenfalls keine gelegenheit mehr geben

-
meister123 schrieb:
1. habe ich nicht behauptet, dass diese komponenten fehlerhaft sind
Naja, wie mans nimmt. Ich darf mal zitieren:
meister123 schrieb:
unter optimalen bedingungen funktionieren die auch halbwegs nur habe ich das gefühl, dass diese komponenten nicht wirklich stabil laufen.
Das einzige was ich mit meiner Aussage an den Mann bringen wollte: Dein Gefühl ist falsch.
meister123 schrieb:
bei der fehlersuche ist es naheliegend, dass man auch alternative wege berücksichtigt.
Bei der Fehlersuche ist es eher naheliegend, dass man versucht sein Programm fehlerfrei zu gestalten. Dabei hilft der Griff zu einer anderen Library meist wenig. Mir unverständlich woher immer dieser Irrglaube kommt, dass ein Librarywechsel hilft, wenn man die ursprüngliche Library falsch angewandt hat. Aber scheinbar müssen immer alle erst mal Dinge die andere in Serienprodukten verwenden zunächst als fehlerhaft deklarieren, austauschen, um dann zu merken, dass es nicht besser wird. Irgendwie greift keiner mehr gleich zu Beginn an die Wurzel des Übels sprich einem verkorksten Programmdesign, einem Misverständnis oder ähnliches. Das kanns wohl nicht sein oder?
meister123 schrieb:
2. brauch ich mich hier nicht verarschen zu lassen, auch wenns von sogenannten moderatoren geschieht.
Keiner verarscht dich hier. Aber die eingeschnappte Art und Weise wie du reagierst, zeigt mir, das ich wohl nen wunden Punkt getroffen habe. Vermutlich wars dir im tiefsten Innern schonk lar, das der Wechsel zu Indy nichts bringt. Da erträgt mans natürlich nicht, wenn aussenstehende das Selbe auch nochmal betonen.
meister123 schrieb:
tut mir leid wenn ich nicht da über-drüber-genie bin.
Macht nichts. Keiner hier wird sich wohl als Über-Genie sehen...
meister123 schrieb:
zum ergötzen wird es hier jedenfalls keine gelegenheit mehr geben

Tja, schade. Ohne Qualifizierte Fehlerbeschreibungen, gibts auch keine qualifizierten Hilfestellungen. Aber womöglich ists auch besser so.
-
Habt ihr es echt nötig, Beiträge zu löschen die gegen Borland gehen?...
echt traurig, aber das zeigt wieder was von Borland und EUCH zu halten ist...MFG
Microsoft Certified Application Developer (MCAD)
-
Borland: Malst du noch, oder programmierst du schon?
-
http://www.dontfeedthetroll.de/images/dftt.gif
OT: währe doch mal noch was für unsere sammlung
-
@ Topic: Die Indys und diese TServer/Client..blabla dingens laufen spitze wenn man damit umgehen kann. Dem IndyTCP Client hab ich nen Thread zum Lesen verpasst
selbst eine billige Timerlösung funktioniert, ist mir persönlich zu unsauber. Sei nicht frustriert ! ich helfe dir gerne deinen IndyTCPClient zum lesen zu bekommen.[Edit 200023: Ich will mal nicht so sein.......]
Füge deinem Projekt ein Thread Objekt hinzu. In der cpp Datei deiner Thread Klasse sollte folgendes stehen://--------------------------------------------------------------------------- void __fastcall MyThread::Execute() { SetName(); while(!Terminated) { Synchronize(Compute); } } //--------------------------------------------------------------------------- void __fastcall MyThread::Compute() { Form1->ClientReceived(); /* Deklariere eine klassenspezifische Funktion im TForm1 header die IdTCPClient1->ReadBuffer() verarbeitet: void __fastcall TForm1::ClientReceived() { if(Client1->Connected()) { char Buff[1024]; Client1->ReadBuffer(Buff,1024); ... ...... */ } //------------Im Onconnect allokierst du mit new eine neue Thread Instanz deiner TThread Klasse:
//Header: TThread AThread; AThread = new MyThread(true); //Start suspended AThread->Priority = tpNormal; AThread->Resume();Im OnDisconect gibst du den Thread frei und terminierst ihn.
Cisco Certified Network Associate und staatlich geprüfter ITA *gg*