Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi sockets strings schicken/lan. (https://www.delphipraxis.net/34771-sockets-strings-schicken-lan.html)

Beckman 28. Nov 2004 02:41


sockets strings schicken/lan.
 
Delphi-Quellcode:
type
  TDatensatz = record
    Nachname: String;
    Vorname: String;
    Klasse: String;
    Lehrer: String;
    Bemerkung: String;
  end;
global var:

Delphi-Quellcode:
var
  Form1: TForm1;
  Daten: Tdatensatz;
ich will entweder sockets oder indy tcp server/client verwenden.


wie kann ich vom clienten zum server diesen Tdatensatz transferieren, am leichtesten?

bzw, oder wie macht man das mit streams oder einfach nur mit sendln, sodass ich das dann wieder abfange sortiert auf der anderen seite.

kann mir da wer hinweise geben?

Ultimator 28. Nov 2004 12:03

Re: sockets strings schicken/lan.
 
Mit den Sockets schaust du dir am besten mal SendBuf und ReceiveBuf an ;-)

Beckman 28. Nov 2004 12:18

Re: sockets strings schicken/lan.
 
jow. thanks.

ich hab inzwischen bissi rum experimentiert und rausgefunden, dass die data.dat am schoensten im hex editor ausschaut, wenn ichs so mach:

Delphi-Quellcode:
type
  TDatensatz = record
    Nachname: String[30];
    Vorname: String[30];
    Lehrer: String[30];
    Klasse: String[3];
    Bemerkung: String[105];
  end;

Delphi-Quellcode:
fstream := tfilestream.Create(extractfilepath(paramstr(0)) + 'data.dat', fmcreate);
fstream.Write(daten, sizeof(daten));
fstream.Free;

so schaut das recht formell aus im hex editor, das heisst, es muesste funken, wenn ichs in genau dieser form an daten (var daten: Tdatensatz) uebergeben kann.

hab mal mit dem probiert, weil das ja aehnlich dann funken muesste wie ueber LAN mit streams.


kann mir wer sagen, wie man das an meine daten-var wieder uebergeben kann?

das mit send und receivebuff schau ich mir dann an, thanks.

Beckman 28. Nov 2004 12:59

Re: sockets strings schicken/lan.
 
muhahhaaa. habs rausgefunden

fstream.ReadBuffer(Daten, SizeOf(TDatensatz));

edit:
ich verwend .read(). funkt auch:
brauch naemlich keine buffer, deren sinn ich net versteh :)
weil ka, was der unterschied ist :)


so gehts :)

weil ich ja schoen brav immer string[x] gemacht hab :)


jetzt versuch ich das ganze mal wie oben vorgeschlagen ueber LAN zu senden mit send/receivebuf mit den sockets.



update:


ich will das als tmemory stream schicken und empfangen.





Delphi-Quellcode:
procedure TForm1.TcpServer1Accept(Sender: TObject;
  ClientSocket: TCustomIpClient);
var
  stream: TmemoryStream;
begin
stream := tmemorystream.Create;

ClientSocket.ReceiveBuf(stream.memory^, sizeof(TDatensatz));
//clientsocket.ReceiveBuf(stream, sizeof(TDatensatz));

stream.Read(Daten, sizeof(Tdatensatz));

memo1.Lines.Add(daten.Nachname);
memo1.Lines.Add(daten.Vorname);
memo1.Lines.Add(daten.Lehrer);
memo1.Lines.Add(daten.Klasse);
memo1.Lines.Add(daten.Bemerkung);

stream.Free;
end;

da werden nur leere zeilen erstellt.

ich will vorher das erhaltene in den memorystream laden und den dann dem daten-record uebergeben.

der fehler liegt irgendwo beim receivebuf imho...

ich weiss also ganz genau, wie lang der empfangene stream sein muesste, der in den memorystream soll, also so gross wie halt Tdatensatz aber das funkt net... *wein*


will wer helfen?

Beckman 28. Nov 2004 17:06

Re: sockets strings schicken/lan.
 
ich erstell mal ne neue frage.
jetzt hab ichs mit indies versucht, obwohl ich genauso erfolglos bin...

hier link: http://www.delphipraxis.net/internal...=274997#274997


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:21 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