Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi eine Frage zu dyn . Array im Netzwerk (https://www.delphipraxis.net/20207-eine-frage-zu-dyn-array-im-netzwerk.html)

SIn 14. Apr 2004 18:02


eine Frage zu dyn . Array im Netzwerk
 
Ich möchte einen client und einen Server schreiben , die beide ein gleich großes dyn. Array haben.
Nach dem das Passiert ist, soll der server den Inhalt seines dyn. array an den client verschicken.

Delphi-Quellcode:
////////////////////////client///////////////////////////////////
type
  Datenpack2   = Record
  Chatchannels : Array of String[20];
  index2:integer;
end;
...
var rec:datenpack2

 
   clientsocket2.Socket.ReceiveBuf(rec,sizeof(rec));
   setlength(rec.Chatchannels,rec.index2);
   clientsocket2.Socket.ReceiveBuf(rec,sizeof(rec));
                                         
   for i:=0 to high(rec.Chatchannels)-1 do
   memo1.lines.Add(rec.Chatchannels[i]);


//////////server/////////////////////////
rec:datenpack2;




socket.ReceiveBuf(rec,sizeof(rec));
                                               
  rec.index2:=anZchat;// ist größe des arrays was beide haben sollen
  for i := 0 to initServer.Socket.ActiveConnections-1 do
     initserver.Socket.Connections[i].SendBuf(rec,sizeof(rec));
 

  setlength(rec.Chatchannels,anZchat);/// setzt sein array auf die gleiche größe
  log.Lines.add('Eingehende Verbindung');

  for j:= 0 to high(rec.Chatchannels)-1 do
    rec.Chatchannels[j]:=Chatliste[j];/////übergibt seinen Inhalt an das dynarray

  for k := 0 to initserver.Socket.activeConnections-1 do // verschickt es nun wieder erneut
     initserver.Socket.Connections[k].SendBuf(rec,sizeof(rec));
Das Programm stürzt dabei immer ab , und wir wissen nicht warum.
Da ich und meine Gruppe blutige Anfänger auf diesem Gebiet sind , hoffen wir hier Hilfe zu finden
Danke im Voraus
mfg SIn

[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

Tryer 14. Apr 2004 18:59

Re: eine Frage zu dyn . Array im Netzwerk
 
SizeOf(rec) ergibt 8, da ChatChannels nur ein Pointer auf das Array ist. Ihr übertragt somit also nur diesen Pointer, aber nicht den Inhalt des Arrays.

Delphi-Quellcode:
type
  TChatChannel = string[20];
  TDatenPack = record
     ChatChannels: array of TChatChannel;
     Index2: Integer;
  end;

procedure SaveDatenPackToStream(Pack: TDatenPack; AStream: TStream);
begin
  AStream.Write(Pack.Index2, SizeOf(Integer));
  AStream.Write(Pack.ChatChannels[0], SizeOf(TChatChannel) * Pack.Index2);
end;

procedure LoadDatenPackFromStream(AStream: TStream): TDatenPack;
begin
  AStream.Read(Result.Index2, SizeOf(Integer));
  SetLength(Result.ChatChannels, Result.Index2);
  AStream.Read(Result.ChatChannels[0], SizeOf(TChatChannel) * Result.Index2);
end;
MfG,
Tryer

SIn 14. Apr 2004 21:43

Re: eine Frage zu dyn . Array im Netzwerk
 
Danke dir. :-D
mfg Sin


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