Entwickler-Ecke

Internet / Netzwerk - problem mit receivebuf/sendbuf und record


Hendi48 - Mi 18.07.07 13:27
Titel: problem mit receivebuf/sendbuf und record
Hi,
ich habe einen Updater der der die neueste version und eine notice zu einem Client übermittelt. Leider klappt das mit dem notice senden nicht so es kommt immer: nil kann nicht zu TRicheditStrings zugewiesen werden.

mein code (ausschnitte):
Server:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
type
TestRecord = record 
   lines: TStrings;
  end;

  TForm2 = class(TForm)
[...]

procedure TForm2.ServerSocket1ClientWrite(Sender: TObject;
  Socket: TCustomWinSocket);
var
buffer: TestRecord;
begin

with Buffer do begin 
  lines := richedit1.lines;
end;

Socket.SendBuf(Buffer, SizeOf(Buffer));
Socket.Sendtext(Edit1.text);
end;

Client:

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:
26:
27:
28:
29:
30:
31:
32:
type
  TestRecord = record 
   lines:  Tstrings;
  end;

[...]

procedure TForm2.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var
  aktuell: boolean;
  getbuffer: TestRecord;
begin
  aktuell:=false;
  label5.Caption:=Socket.ReceiveText;
  Application.ProcessMessages;
  aktuell:=label4.caption=label5.caption;
  if not aktuell then
    begin
      showmessage('OMG new version!');
    end;
  if aktuell then
    begin
      showmessage('You are using the latest version.');
    end;

  Socket.ReceiveBuf(GetBuffer, SizeOf(GetBuffer));

  with GetBuffer do begin
    RichEdit1.Lines:=lines;
  end

end;


Edit:
Wenn ich

Delphi-Quelltext
1:
2:
3:
4:
with GetBuffer do begin
lines.SaveToFile('lol.txt');
//  RichEdit1.Lines:=lines;
end;

mach kommt ne access violation also kann es sein das der gar nix empfängt?


Narses - Mi 18.07.07 14:55
Titel: Re: problem mit receivebuf/sendbuf und record
Moin!

user profile iconHendi48 hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
type
TestRecord = record 
   lines: TStrings;
  end;

Fehler-Klassiker, kuckst du in die FAQ [http://www.delphi-library.de/topic_Probleme+beim+SendenEmpfangen+von+records++dyn+Objekten_60793.html]. :mahn: :les: ;)

user profile iconHendi48 hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
with Buffer do begin 
  lines := richedit1.lines;
end;

Das ist komplett falsch, du kannst Objekte nicht durch Zuweisung der Zeiger kopieren, dazu gibt es .Assign()! :mahn: :idea:

cu
Narses


Hendi48 - Mi 18.07.07 15:08

hm also is ein record schlecht dafür geeignet..wie soll ich es denn sonst machen? Den text in eine .txt speichern lassen und dann zum client senden?


Narses - Mi 18.07.07 15:10

Moin!

Schau mal hier [http://www.delphi-forum.de/viewtopic.php?t=73851&start=0&postdays=0&postorder=asc&highlight=listbox], das Problem dürfte ähnlich gelagert sein. ;)

cu
Narses


Hendi48 - Mi 18.07.07 20:28

hm das is mir zu kompliziert, ich lass es einfach von meiner homepage runterladen.
Trotzdem danke für die Hilfe!