AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Von den Sockets zu IdTCPClient + IdTCPServer
Thema durchsuchen
Ansicht
Themen-Optionen

Von den Sockets zu IdTCPClient + IdTCPServer

Ein Thema von Harry M. · begonnen am 13. Apr 2005 · letzter Beitrag vom 13. Apr 2005
Antwort Antwort
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#1

Von den Sockets zu IdTCPClient + IdTCPServer

  Alt 13. Apr 2005, 15:00
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:  '$RESULT$KATEGORIE$ERGEBINIS$' 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:
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
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Benutzerbild von sECuRE
sECuRE

Registriert seit: 10. Apr 2003
Ort: Heidelberg
360 Beiträge
 
Delphi 7 Professional
 
#2

Re: Von den Sockets zu IdTCPClient + IdTCPServer

  Alt 13. Apr 2005, 15:33
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
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#3

Re: Von den Sockets zu IdTCPClient + IdTCPServer

  Alt 13. Apr 2005, 15:52
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:
    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);
und so werden sie vom clienten behnadelt:
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$
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz