Da sind schonmal die beiden Records:
Code:
type TMessage = Record
Command:String;
End;
TMessage_Header = Record
Size:Longword;
End;
Der Client sieht nun so aus
Code:
procedure TForm1.btn_testClick(Sender: TObject);
var Msg:TMessage;
Header:TMessage_Header;
sendstream:TMemorystream;
begin
sendstream:=TMemorystream.create;
Msg.Command:='test';
Header.Size:=sizeof(Msg);
sendstream.WriteBuffer(header,sizeof(header));
sendstream.WriteBuffer(Msg,header.size);
sendstream.position:=0;
Client.Socket.SendStream(sendstream);
end;
So siehts im server aus:
Code:
procedure TForm1.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var nRead : Integer;
Buff : Array[Word] Of Byte;
OldPos : Integer;
begin
OldPos := fdata.Position;
fData.Position := fData.Size;
Repeat
nRead := Socket.ReceiveBuf(buff, High(Buff) - Low(Buff));
fData.WriteBuffer(buff, nRead);
Until ( Socket.ReceiveLength = 0 );
fData.Position := OldPos;
net_decodestream(fdata);
end;
procedure net_decodestream(var data:TMemorystream);
Var Header:TMessage_Header;
Msg:TMessage;
Begin
data.ReadBuffer(header,sizeof(header));
data.readbuffer(msg,header.size);
showmessage(msg.command);
End;
So, wenn ich dann das schowmessage im letzten teil, net_decodemessage mache, kommt nur ein leeres fenster. binde ich dieselben 3 zeilen allerdings direkt in den client ein, klappt alles bestens