Einzelnen Beitrag anzeigen

PartyPansi

Registriert seit: 14. Nov 2003
4 Beiträge
 
#1

Record in Stream speicher und über netzwerk verschicken

  Alt 16. Feb 2004, 19:24
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
  Mit Zitat antworten Zitat