| Autor |
Beitrag |
avenger
      
Beiträge: 90
|
Verfasst: Mi 17.03.10 01:56
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 
      
Beiträge: 90
|
Verfasst: Fr 19.03.10 20:26
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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).
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
avenger 
      
Beiträge: 90
|
Verfasst: Sa 20.03.10 14:53
BenBE hat folgendes geschrieben : | | 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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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 ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
avenger 
      
Beiträge: 90
|
Verfasst: 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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
avenger 
      
Beiträge: 90
|
Verfasst: 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
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: 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.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
avenger 
      
Beiträge: 90
|
Verfasst: Sa 20.03.10 18:35
Xentar hat folgendes geschrieben : | 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
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: 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..
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
avenger 
      
Beiträge: 90
|
Verfasst: Sa 20.03.10 19:46
Xentar hat folgendes geschrieben : | 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 Narses: 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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: 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  oberhalb des ersten Postings. Danke! 
|
|