Einzelnen Beitrag anzeigen

PetziBaer

Registriert seit: 22. Dez 2015
4 Beiträge
 
#2

AW: TServer/Client -Socket Datenaustausch

  Alt 14. Jan 2016, 09:53
Ich habe das Programm mitlerweile erweitert (erweitern wollen).

Gedanke war, das Record um ein String-Array zu erweitern und dort die Items der ListBox zu speichern.
Leider lässt sich die Größe des Arrays nicht bestimmen. Das progamm schmiert immer an der Stelle ab.

Fehlermeldung:
Im Projekt P_Server.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 00403400 in Modul 'P_Server.exe'. Lesen von Adresse 00000000' aufgetreten.

Der Code sieht folgendermaßen aus:

Code:
type
  TChatMessage = packed Record
    Text : String[255];
    User : String[255];
    Clients : Array of String;
    Command : Integer;
  End;
...

var
  i : Integer;
begin
  listbox.Clear();

  for i := 0 to clientList.Count -1 do
  begin
    listbox.Items.Add(IntToStr(clientList.Items[i].SocketID) + ' ' + clientList.Items[i].Username);
  end;

  chatMessage.Command := 4;                              //4 = ListBox Update

  SetLength(chatMessage.Clients, listBox.Items.Count);   //HIER KOMMT DER FEHLER!

  for i := 0 to listBox.Items.Count -1 do
  begin
    chatMessage.Clients[i] := listBox.Items[i];
  end;

  for i := 0 to Server.Socket.ActiveConnections -1 do
  begin
    Server.Socket.Connections[i].SendBuf(chatMessage, SizeOf(chatMessage));
  end;
Ich denke vom Ansatz wird das funktionieren. Allerdings kann ich mir nicht erklären wieso dieser Fehler auftritt.

Im übrigen wäre ich auch über andere Vorhergehensweisen für einen solchen Prozess dankbar, sofern man dadurch vielleicht "sauberer" programmiert.

Mfg
  Mit Zitat antworten Zitat