Autor Beitrag
Mossi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 99
Erhaltene Danke: 2

Win XP, Linux
D7 Enterprise, K3 Prof
BeitragVerfasst: Do 12.10.06 14:11 
ich bin gerade am Verzweifeln.

ich versuche einen Stream mit Hilfe von TIdTcpClient an einen server zu schicken und bin auch schon dabei, dass ich die daten per Network-Sniffer überprüfe.
wenn ich den Stream aus einem File lese (TFileStream) klappt das auch wunderbar und über den Sniffer sehe ich, dass genau der Inhalt des Files verschickt wird.

Nun versuche ich aber das Ganze ohne File zu versenden und scheitere daran, dass da irgendwas verschickt wird aber nicht das, was ich eigentlich verschicken will.

Der Source dazu sieht im moment folgendermaßen aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
TTelegrammStruct = record
  Size: LongWord;
  Content: string;
end;

...

var
  send:   TTelegrammStruct;
  stream: TMemoryStream;
begin
  send.size := 14;
  send.content := '0000000001Test';

  stream := TMemoryStream.Create;
  stream.Position := 0;
  stream.Size     := 18;
  
  stream.WriteBuffer(send.Size, SizeOf(send.Size));
  stream.WriteBuffer(send.Content, send.Size);
  
  IdTCPClient.WriteStream(stream, true);

  stream.Free;
end;


Also das Protokoll ist so spezifiziert, dass die ersten 4 Bytes des Streams die nachfolgende Größe des Inhalts angeben.

Es werden zwar genau 18 Bytes gesendet, aber der Inhalt hat nix mit dem zu tun, was ich in den Stream geschrieben habe
ausblenden Quelltext
1:
2:
0000:  0E 00 00 00 04 81 47 00 C4 5A 9B 00 98 42 9B 00  ......G..Z...B..
0010:  00 00                                            ..


Was ist da mein grundlegender Fehler?
Mossi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 99
Erhaltene Danke: 2

Win XP, Linux
D7 Enterprise, K3 Prof
BeitragVerfasst: Do 12.10.06 15:12 
:oops:

dummer fehler...

man sollte vielleicht keinen Zeiger übergeben sondern den Inhalt

Also Korrektur:
ausblenden Delphi-Quelltext
1:
stream.WriteBuffer(PChar(send.Content)^, send.Size);