Entwickler-Ecke
Internet / Netzwerk - [SendText] Dos Output Problem
Minime - Di 05.09.06 20:16
Titel: [SendText] Dos Output Problem
Abend!
Ich habe ein problem mit (ClientSocket.)Socket.SendText
Im Thread
Thread [
http://www.delphi-forum.de/topic_Capture+Dos+Output_64110.html]
hatte ich die eine funktion kurz umgeschrieben ( String Output ) und wollte diesen String nun versenden nur leider überträgt die SendText function den String nicht
Ich will nur wissen woran das liegt ;-)
Narses - Di 05.09.06 20:47
Moin!
Dein Link ist kaputt (das Format ist so: [url=proto_host_file]Text[/url]). ;)
Dann zu deinem Problem: Mach doch mal ein ShowMessage mit dem Ergebnis-String. Wenn das klappt, liegt´s zumindest nicht am .SendText, der sollte dann eigentlich auch laufen.
Klappt das nicht, dann hast du einen Fehler in deiner ExecCommand-Prozedur. ;)
cu
Narses
Minime - Di 05.09.06 21:30
ja ShowMessage klappt bzw MessageBox
das hatte ich ja schon ausprobiert
evtl wichtig ist das der string so verschickt wird
Delphi-Quelltext
1: 2: 3:
| buffer := execconsole(C:\test.bat); buffer := 'Shell#' + buffer; Socket.SendText(buffer); |
auf der anderen seite kann das dann über
Split(data,'#',2) ausgelesen werden kann aber das kommt dort immer
'Shell#' an
Narses - Di 05.09.06 21:45
Moin!
OK, dann mach mal folgendes:
Delphi-Quelltext
1: 2: 3: 4:
| buffer := execconsole('C:\test.bat'); buffer := 'Shell#' + buffer; ShowMessage(buffer); Socket.SendText(buffer); |
Wird das beim Sender korrekt angezeigt? Wenn ja, dann gib mal im OnRead des Empfängers den kompletten empfangenen String direkt und ohne Umwege per ShowMessage aus und schau mal, was da wirklich ankommt.
Ansonsten ist das bei dir der klassische Fall: du solltest dir Gedanken über ein
PROTOKOLL machen und ausserdem
das hier [
http://www.delphi-library.de/topic_Datenpakete+bei+den+SocketKomponenten+auseinanderhalten_56194.html] mal ansehen. ;)
cu
Narses
Minime - Di 05.09.06 22:09
1 ich werd mal alls überprüfen
2 @ Protokoll
tja das ist so ne sache
für mein Projekt ist deine Lösung für mich zu aufwändig, ist schon ewig her aber ich glaube du verwedest irgendwie stringlists und die verwende ich
nicht (soll ja ohne Classes, Controls etc sein -> jetzige Server größe 5 kb ;-) )
zudem ist diese Split Lösung für mich einfacher und außerdem schnell zu implementieren
jetzt nichts gegen dich aber für mich keine richtige option
außerdem hatte ich selbst schon ein entwickelt auf Stream-Basis ( Stream bestet aus Header mit infos und dem Daten Stream)
diese lösung war aber dumm da windoof irgendwie die streams ab gewissen größen teilt und dann kommen nur fragmente an und mann diese paketgröße nicht verändern :-(
3
ich hab viele meinungen gehört zu den sockets etc einige sagen, alles was man verschickt kommt an, andere wie du sind skeptischer
ich persöhnlich hatte noch nie probs damit auch bei großen strings mit über 5k zeichen ^^
Narses - Di 05.09.06 22:26
Moin!
Minime hat folgendes geschrieben: |
2 @ Protokoll
tja das ist so ne sache
für mein Projekt ist deine Lösung für mich zu aufwändig, ist schon ewig her aber ich glaube du verwedest irgendwie stringlists und die verwende ich nicht (soll ja ohne Classes, Controls etc sein -> jetzige Server größe 5 kb ;-) ) |
Die Stringlisten sind nicht unbedingt nötig, das geht auch anders. Es geht mir auch mehr um das Prinzip und die Techniken, die ich da so vorstelle, als um den konkreten Code. ;)
Minime hat folgendes geschrieben: |
| zudem ist diese Split Lösung für mich einfacher und außerdem schnell zu implementieren |
...und leider deshalb im allgemeinen falsch. :? Was passiert wohl, wenn dein Trennzeichen in der Ausgabe des Kommandos auftaucht (z.B. in einem Dateinamen)? :shock: Weiterhin: du verwendest das '#' als Trennzeichen, nicht als Terminatorzeichen, das wird Probleme geben... :|
Minime hat folgendes geschrieben: |
| jetzt nichts gegen dich aber für mich keine richtige option |
Es ist mir letztlich egal, ob du etwas aus meinen Vorschläge machst; wenn dein Code funktioniert, ist doch alles prima. ;) Wenn nicht, dann solltest du allerdings vielleicht doch noch mal in dich gehen... :mrgreen:
Minime hat folgendes geschrieben: |
| diese lösung war aber dumm da windoof irgendwie die streams ab gewissen größen teilt und dann kommen nur fragmente an und mann diese paketgröße nicht verändern :-( |
Genau dieses Problem wird im Protokoll-Tut gelöst. :zwinker:
Minime hat folgendes geschrieben: |
3
ich hab viele meinungen gehört zu den sockets etc einige sagen, alles was man verschickt kommt an, andere wie du sind skeptischer
ich persöhnlich hatte noch nie probs damit auch bei großen strings mit über 5k zeichen ^^ |
Du hast mich vermutlich falsch verstanden, ich habe nichts gegen die Sockets; und ich habe auch keine Probleme damit (im Gegenteil, ich finde diese Kompos [für didaktische Zwecke] ausgesprochen gut!). Weiterhin: ich bin mir sicher, dass die Sockets keine Daten "verlieren", ich bezweifle, ob du sie richtig verarbeitest... :D Deshalb die Ausgabe. ;)
Aber du bist ja schon groß und kannst die Probleme sicher auch alleine lösen, hast ja jetzt genug Ansätze beisammen. ;)
cu
Narses
Minime - Di 05.09.06 22:28
:P :P :P :P :P :P ich krieg mich nicht mehr!
buffer := execconsole('C:\test.bat'); // evtl. auch mal 'cmd /c c:\test.bat' oder direkt 'cmd /c dir'
buffer := 'Shell#' + buffer !!!!!!!!!!!!!!!!!!!!!! + '#' !!!!!!!!!!!!!!!!!!!!!!!!;
ShowMessage(buffer);
Socket.SendText(buffer);
thnx narses & TGR ihr beide wart wunderbar! :D
Minime - Di 05.09.06 22:31
PS
| Zitat: |
Aber du bist ja schon groß und kannst die Probleme sicher auch alleine lösen, hast ja jetzt genug Ansätze beisammen. ;)
|
entdecke ich da eine gewisse ironie ? ;-)
naja nicht böse sein
Narses - Di 05.09.06 22:31
Moin!
Sorry, aber das Problem hier bleibt weiter... ;)
Narses hat folgendes geschrieben: |
Minime hat folgendes geschrieben: | | zudem ist diese Split Lösung für mich einfacher und außerdem schnell zu implementieren |
...und leider deshalb im allgemeinen falsch. :? Was passiert wohl, wenn dein Trennzeichen in der Ausgabe des Kommandos auftaucht (z.B. in einem Dateinamen)? :shock: |
cu
Narses
Minime - Di 05.09.06 22:51
also entweder nimmt man dein protokoll oder mann nimmt eben ein trennzeichen das zum anlass passt (zb '|' für dateinamen etc;-)
oder man giebt die länge der abschnitte im string an und copier diese eben raus
zb Shell#length(output)#O##U##T##P##U##T#
und kopiert das dann eben über move oder sonsteeinen befehl dann raus
TGR ist der der mir im anderen thread geholfen hat
Narses - Di 05.09.06 22:57
Moin!
Minime hat folgendes geschrieben: |
| also entweder nimmt man dein protokoll |
Es ist gar nicht mein Protokoll, sondern eine grundlegende Idee oder Vorgehensweise. ;) Ich erhebe keinen Anspruch darauf (nur auf mein Tut). :D
Minime hat folgendes geschrieben: |
| oder mann nimmt eben ein trennzeichen das zum anlass passt (zb '|' für dateinamen etc;-) |
Es muss nicht "zum Anlass" passen, sondern
darf vielmehr
nicht in der Datenmenge auftauchen! :shock: :mahn: Du hast völlig richtig erkannt, dass es egal ist, welches Zeichen das ist. ;)
Minime hat folgendes geschrieben: |
| thnx narses & TGR ihr beide wart wunderbar! :D |
Schön, wenn ich dir helfen konnte. ;)
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!