AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Stringlist mit SendStream versenden
Thema durchsuchen
Ansicht
Themen-Optionen

Stringlist mit SendStream versenden

Ein Thema von runningsoft · begonnen am 10. Feb 2017 · letzter Beitrag vom 11. Feb 2017
 
Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
108 Beiträge
 
Delphi 10.4 Sydney
 
#1

Stringlist mit SendStream versenden

  Alt 10. Feb 2017, 23:59
Hallo zusammen,

ich sitze schon ewig über der Aufgabe einen Record, der neben einigen festen Strings und Integerwerten auch eine Stringlist enthält, über TClientSocket bzw. TServerSocket zu versenden bzw. zu empfangen. Leider bisher ohne Erfolg. Lasse ich die Stringliste testweise aus meinem Record heraus, funktioniert das versenden des Records vom Client an den Server wunderbar. Versende ich das ganze mit der Stringliste gibts am Server sofort eine Exception, sobald ich versuche auf den Inhalt der übertragenen Stringliste zuzugreifen.

Hier mal ein bisschen Code:
Delphi-Quellcode:
type
CustomRec = record
   RecID : Integer;
   RecVorgang : String[15];
   RecStatus: integer;
   ....
   RecTNListe: TStringList;
   end;
Erstellen und versenden des Records am Client:
Delphi-Quellcode:
procedure TClientForm.BitBtn1Click(Sender: TObject);
var MyTNList : TStringList;
    MStr : TMemoryStream;

begin
....
Finalize(Rec); //Record zur Sicherheit komplett leeren
Rec.RecListe := TStringList.Create; //Stringliste des Records erzeugen
with Rec do
   begin
   RecID := GetClientID;
   RecVorgang := 'Irgendwas';
   RecStatus := 2;
   .....
   RecTNListe.Text := MyTNList.Text; //MyTNList wurde vorher created und enthält Daten
   end;
//als Stream versenden
MStr := TMemoryStream.Create;
  try
  MStr.Write(Rec,SizeOf(Rec));
  MStr.Position := 0;
  Form5.ClientSocket1.Socket.SendStream(MStr);
  finally
  if Assigned(MStr) then
    begin
    MStr := nil;
    MStr.Free;
    end;
  end;
end;
Und hier noch die Empfangsprozedur am Server:
Delphi-Quellcode:
procedure TServerForm.ServerSocket1ClientRead(Sender: TObject;Socket: TCustomWinSocket);
var ....
    iLen: integer;
    Rec : CustomRec;
    Bfr : Pointer;
begin
Finalize(Rec);
Rec.RecListe := TStringList.Create; //Stringliste des Records erzeugen
//Länge des Streams empfangen
iLen := Socket.ReceiveLength;
//Arbeitsspeicher reservieren
GetMem(Bfr, iLen);
//Stream empfangen und in Arbeitsspeicher schreiben
   try
   Socket.ReceiveBuf(Bfr^, iLen);
   //Position auf das Ende des Streams setzen
   MStream.Seek(0,soFromEnd);
   MStream.Write(Bfr^, iLen);
   finally
   FreeMem(Bfr);
   end;
MStream.Seek(0,soFromEnd);
//an erste Position gehen
MStream.Position := 0;
//Buffer in Record einlesen
MStream.ReadBuffer(Rec,iLen);

//wenn ich jetzt auf die Stringliste des Records zugreifen will, gibts eine Exception
//die Anzeige der Strings oder Integerwerte des Records funktioniert dagegen problemlos
//lasse ich Server und Client testweise auf ein und dem selben Rechner laufen, funktioniert es wunderbar
showmessage(Rec.RecTNListe.Strings[0]);
...
end;
Es scheint so, dass ich nicht wirklich die Stringliste per Sendstream übertrage, obwohl diese am Client definitv in den Record geschrieben wird, sondern nur Pointer auf die Adressen der Daten der Stringliste. Da der (entfernte) Server diese Adressen des Clients nicht kennt, kommt die Exception.

Die Frage ist also, wie bekomme ich den INHALT der Stringliste übertragen und auch wieder ausgelesen?

Danke schon mal für Eure Mithilfe.
  Mit Zitat antworten Zitat
 


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 06:53 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