Entwickler-Ecke

Internet / Netzwerk - StringStream ? Wie empfange und sende ich einen StringStream


avenger - Mi 17.03.10 01:56
Titel: StringStream ? Wie empfange und sende ich einen StringStream
Hallo,

Kann mir mal jemand genau erklaeren wie man mit den Indys einen StringStream empafangen kann ? Ich moechte von einer anderen Anwenung ein Telegramm empfangen in dem das erste Byte Laenge enthaelt und die darauffolgenden die Nachricht. Ich hoffe das ich hier mit StringStream auf dem richtigen weg bin. Brauche ich dazu das OnNoCommandHandler event ? Ich nutze Delhphi 7 und die Indy 9 Komponenten.


avenger - Fr 19.03.10 20:26

Keiner ????


BenBE - Sa 20.03.10 12:11

Einfach mit SendStream raussenden. Mehr steht bei Narses in den Tutorials drinnen (wie das bzgl. Versand von Strings geht).


avenger - Sa 20.03.10 14:53

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Einfach mit SendStream raussenden. Mehr steht bei Narses in den Tutorials drinnen (wie das bzgl. Versand von Strings geht).


Ja das hab ich ja schon, mir geht es eher ums empfangen. Brauch ich einen Command Handler, oder geht das mit dem OnNoCommandHAnler ?


BenBE - Sa 20.03.10 16:07

Wenn Du das Byteweise selber auswertest, kannst Du das durchaus selber machen. Ist, wie man bei Narses in den Tuts sieht, ja nicht soo schwer ...


avenger - Sa 20.03.10 16:20

Also ich sehe nur das narses tutorials ueber sockets sind und nicht ueber Indy. Das es da parallelen gibt ist mir schon klar. Ich habe nie etwas mit sockets gemacht und in den Indy Tutorials steht das man alles uber sockets vergessen soll wenn man mit Indy arbeiten will. Ich wuerde auch nicht mittlerweile zum 3ten mal daemlich fragen wenn ich es finden wuerde, aber ich finds leider nicht. Ich weiss nicht in welchem ereignis ich den Stringstream (mit dem Indy Server) ueberhaupt empfangen kann. Dachte mir bei OnNoCommandHandler aber da komm ich nicht wirklich weiter. Normale Strings kann ich mit OnNoCommandHandler empfangen aber (nun zum vierten mal) ich weiss nicht wie ich es mit einem StringStream anstellen soll, und da hilft mir narses tutorial uber die Sockets auch nicht weiter.

(Byteweise auswerten kann ich auch erst wenn ich das ereignis weiss das ausgefuehrt wird wenn der Server einen StringStream geschickt bekommt)


BenBE - Sa 20.03.10 17:31

Ich meinte auch speziell den Teil, wo Narses die Erklärung für das Protokoll vorstellt. Dass Sockets und Indy etwa soviele Gemeinsamkeiten wie Rindergulasch und Marmelade aufweisen, ist mir klar. Hab bisher nur mit den Indies nur noch nicht viel gemacht.


avenger - Sa 20.03.10 17:44

Ich glaube nun das das gar nicht mit den server ereignissen geht. Habe nun mal ein bissjen nach den IO Handlern gesucht und da gibt es ja den Stream IO Handler. Diesen kann man aber leider nur einem TCP Client zuweisen und nicht einem TCP Server.

Ich habe eine andere Anwendung die einen StringStream schickt (Sie ist aber der client und verbindet sich auch mit meinem INDY Server). Kann mein Indy Server ueberhaupt einen Stream von einem Client empfangen ?

Dachte mir das ich das ganze so geht:

Server wartet auf Verbindung > client verbindet sich > Client sendet Stream waehrend Server Stream empfaengt > dann beendet cleint die Verbindung ?????


Xentar - Sa 20.03.10 17:53

Ich selber hab eigentlich noch nie mit CommandHandlern oder sowas von Indy gearbeitet..
Bisher hab immer nur OnExecute verwendet, und da die Daten selber abgeholt und verarbeitet. Geht ohne Probleme, wenn man weiß, was man tut (Stichwort Threading!).
Damit kannst du empfangen, was du willst - musst dich nur selber drum kümmern.
Wie das genau geht: Siehe Indy Demos, da ist ein TCP Server Beispiel bei.


avenger - Sa 20.03.10 18:35

user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Ich selber hab eigentlich noch nie mit CommandHandlern oder sowas von Indy gearbeitet..
Bisher hab immer nur OnExecute verwendet, und da die Daten selber abgeholt und verarbeitet. Geht ohne Probleme, wenn man weiß, was man tut (Stichwort Threading!).
Damit kannst du empfangen, was du willst - musst dich nur selber drum kümmern.
Wie das genau geht: Siehe Indy Demos, da ist ein TCP Server Beispiel bei.


danke fuer den tipp. Wann wird on execute ausgefuehrt ? Bei mir wird on execute nicht getriggert wenn der Stream gesendet wird !


Xentar - Sa 20.03.10 18:43

OnExecute wird zyklisch ausgeführt, wenn ein Client verbunden ist - egal, ob der was sendet oder nicht.
Jeder Client hat einen eigenen Thread, der immer im Kreis rennt.

Warum das bei dir nicht der Fall ist, kann ich grade nicht sagen..


avenger - Sa 20.03.10 19:46

user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Warum das bei dir nicht der Fall ist, kann ich grade nicht sagen..

Naja zumindest das hab ich jetzt raus. CommandHandlersEnabled muss auf False gesetzt sein damit on Execute ausgefuehrt wird.

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

So habs endlich raus. Geht also tatsaechlich mit dem OnExecute event. Dafuer muessen jedoch alle Command Handler abgeschaltet werden.

Problem geloest, Danke !!!


Yogu - Sa 20.03.10 20:37

Bitte markiere deine Frage als erledigt, damit Hilfestellende sofort sehen, dass sie das Thema nicht durchlesen müssen. Klicke dazu einfach auf user defined image oberhalb des ersten Postings. Danke! :)