AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Server/ClientSocket Problem: Strings senden und empfängen???
Thema durchsuchen
Ansicht
Themen-Optionen

Server/ClientSocket Problem: Strings senden und empfängen???

Ein Thema von romber · begonnen am 27. Aug 2004 · letzter Beitrag vom 27. Aug 2004
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Server/ClientSocket Problem: Strings senden und empfängen???

  Alt 27. Aug 2004, 20:02
Hallo!

Serverteil läuft auf einem Windows 2003 Server, optimiert für Anwendungen. Dabei handelt es sich um eine Anwendung, die die Daten filtert und die Ergebnisse (Strings) an alle aktive Clients weiterleitet. Da ich mit Indy TCP-Kompos nicht klar gekommen bin, habe ich alte gute TServer/ClientSockets benutzt.

Mehrere ständig laufende Threads benutzen eine Funktion, die die übergebene Strings an die Clients verschickt. Dabei werden mehrere Strings pro Sekunde verschickt, also ein permanenter Datenfluss. Beim Client landen dann die empfangenen Daten unbearbeitet in einer TListBox. Alles wunderbar, solange Serverteil und Clientteil lokal auf dem Server laufen.

Anders sieht es aus, wenn Client auf einem entfernten Rechner läuft und über das Internet die Daten empfängt. Dabei wird manchmal (nicht immer) eine empfangene String mit einem Teil der nächsten empfangenen String ergänzt und die letztere ohne dem Teil in die TListBox hinzufügt.

Ungefähr so:

Server sendet: 'Frankfurter Strasse 50, 40000 Frankfurt'
Server sendet: 'Dortmunder Srtasse 20, 30000 Dormund'
Server sendet: 'Berliner Strasse 70, 10000 Berlin'

Client-Anwendung auf dem lokalen Rechner, also auf dem Server-Rechner empfängt die Daten unverändert. Client auf dem entfernten übers Internet verbundenen Rechner empfängt ungefähr so:

Frankfurter Strasse 50, 40000 Frankfurt
Dortmunder Srtasse 20, 30000 DormundBerliner Strasse 70, 100
00 Berlin

Mache ich etwas falsch?

Hier sind die Teile der Code, die für Senden und Empfängen zuständig sind:

Server:

Code:
...
type
 LoadSiteThread = class (TThread)
private
 {private declarations}
http: TIdHTTP;
protected
 {protected declarations}
procedure Execute; override;
end;
...

procedure LoadSiteThread.Execute;
var
Quelltext: string;
begin
   ...
   Quelltext := http.Get('http://www.homepage.de');
   ...
   if FilterData(Quelltext) = false then Terminate //Aufruf der Funktion
end;

...
function FilterData(Data: string): Boolean;
var
FelteredData: string;
i: integer;
begin
  ... //Hier werden die Daten analysiert, also unwichtig
  if Length(FilteredData) > 0 then
  begin
       for i := 0 to frmMainForm.Server.Socket.ActiveConnections - 1 do //sende an alle aktive Clients
       frmMainForm.Server.Socket.SendText(FilteredData)
  else
       Result := false;
end;
...

Client:

Code:
...
procedure TForm1.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
ListData.Items.Insert(0, Socket.ReceiveText) //hier werden die Daten in die TListBox hinzufügt
end;
Was nun? Was ist falsch?

Danke!

MfG,
Ralfi
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Server/ClientSocket Problem: Strings senden und empfänge

  Alt 27. Aug 2004, 23:36
Moin!

Wie schon auf developia.de gesagt, es gibt keine Garantie, das die SendText() Blöcke genauso auch wieder ankommen. Die Packete werden verschickt und kommen auch weiter geteilt wieder an. Bei dem lokalen Rechner ist der Weg / Geschwindigkeit so gross, dass hier das Problem nicht auftritt. Daher nutze entweder ein Trennzeichen zum trennen der einzelnen Zeilen oder sende vor einem String dessen Länge. Auf der Empfangsseite musst du einen Buffer haben wo du dann immer die empfangenen Teile ablegst und komplett erhaltene kannst du dann verarbeiten...

MfG
Muetze1
  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 15:42 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