![]() |
Von den Sockets zu IdTCPClient + IdTCPServer
ich habe mir nen tool geschrieben mit den sockets(darüber will ich jetzt hier keine grossen worte verlieren, weil dies den rahmen sprengen würde). dies geht soweit auch. es läuft aber nur sauber im netzwerk. wenn ich dies im netz teste, treten unendlich viele fehler auf. hauptaufgabe der servers ist es strings zu empfangen, aus zuwerten und die ergebnise zurück zusenden. da ich die im clienten wieder empfange werte ich dort die (so habe ich es genannat) "steuer-string" aus. also der server sendet sowas in etwas:
Delphi-Quellcode:
ich habe mir gedacht, das der client keiene zeit hat, die "steuer-strings" auszuwerten und die richtigen ergebnise zuliefern deshalb habe ich im server immer nach dem senden eines steuer-stringes ein delay gemacht. im netzwerk ist das schon 200ms lang. dann läuft es sauber. in netz geht dies aber nicht mehr, weil der übertragungsweg zulange dauert - oder so - keine ahnung. jedenfalls kommen die steuer strings an, werden aber vom clienten nicht sauber zerlegt, weil schon wieder der nächste kommt. in den edit boxen und listviews etc. werden die steuerstring mal sauber, mal halb oder gar nicht zerlegt dargestellt. ich habe auch schon das delay im server auf 500 genommen um dem clienten noch mehr zeit zur auswertung zugeben. das problem besteht weiter. jetzt könnte ich natürlich noch mehr machen also ein delay von 1000 oder noch mehr. dies scheint mir aber nicht sonderlich sinnvoll: wenn ich eine listview übertrage mit drei spalten und zwanzig zeilen so wäre ich locker bei 1 minute übertragungszeit. dies ist nicht mehr akzeptabel. ich will jetzt mein programm vollständig auf die TCP-Komponeten "umstellen" weil ich hoffe das diese durch ihre thread eigenschaften wesendlich schneller arbeiten. meine fragen sind folgende:
'$RESULT$KATEGORIE$ERGEBINIS$'
1.kennt jemand das problem mit den sockets und wenn ja wie kann ich es beheben 2. wie kann ich mit den TCPClieten einen string senden mit dem TCPServer empfangen und den server die ergebnisse an den verbunden clienten zurücksenden. mit den sockets war das so einfach... und bitte nicht auf die indy-demos verweisen. da steig ich nicht ganz durch. ich vergass wohl zuerwähnen mit IdTCP |
Re: Von den Sockets zu IdTCPClient + IdTCPServer
Hi,
ich vermute weniger, dass da nicht genug Zeit ist, sondern eher, dass die Strings zerlegt werden, weil der Buffer voll ist. Das heißt, er nimmt String 1 und die Hälfte von String 2 und sendet das als Paket. Normalerweise sendet man deshalb nach jeder Nachricht ein #13#10 oder ein ähnliches Trennzeichen, anhand dessen der Client die einzelnen Nachrichten auseinanderfummeln kann ;) Berichtigt mich, sollte ich falsch liegen... cu |
Re: Von den Sockets zu IdTCPClient + IdTCPServer
das trennzeichen ist ja bereits '$'. es ist auch nicht möglich das der server die eine hälfte non string 1 und eine hälft von string 2 nimmt hier mal ein beispiel des versendes:
Delphi-Quellcode:
und so werden sie vom clienten behnadelt:
Log.Lines.Add('$CLIENTPORT$ übertragen '+IntToStr(IniDat.ReadInteger('Connection','Port', 20000)));
ServerSocket1.Socket.Connections[0].SendText('$RESULTREADINI$CLIENTPORT$'+IntToStr(IniDat.ReadInteger('Connection','Port', 20000))); Delay(200);
Delphi-Quellcode:
// Clientport
TempEdit.SelStart := 0; TempEdit.SelLength := 15; if Tempedit.SelText = '$RESULTREADINI$'then begin // client port auslesen TempEdit.SelStart := 14; TempEdit.SelLength := 12; if TempEdit.SelText = '$CLIENTPORT$' then begin TempEdit.SelStart := 26; TempEdit.SelLength := Length(TempEdit.Text)-TempEdit.SelStart; ServerClientPortEdit.Text := TempEdit.SelText; end; // ende von $CLIENTPORT$ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 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 by Thomas Breitkreuz