Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Sockets und Zeiger.... (https://www.delphipraxis.net/93551-sockets-und-zeiger.html)

Dragon27 7. Jun 2007 12:12


Sockets und Zeiger....
 
Hallo,

habe folgenden Programmcode:

Delphi-Quellcode:

type
  TClient = record
    Socket:^TCustomWinSocket;
    Nickname:String;
    free:Boolean;
end;

  Clients: array [1..200] of TClient;

procedure TMainForm.ServerClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
  var i:integer;
begin
dec(connected);
for I := 1 to 200 do begin
if @Socket=@Clients[i].Socket then begin  //Hier stimmt etwas nicht
Clients[i].Nickname:='';
Clients[i].free:=true;
Clients[i].Socket:=nil;
end;

end;
UpdateUser;
end;
So, nun zu meinem Problem... habe noch nie so richtig mit Zeigern gearbeitet aber ich würde natürlich hier gerne Wissen welchen Client ich im TClient wieder
freigeben kann. Also habe ich mir gedacht vergleich doch einfach die Speicheradressen... Aber es geht nicht :-(

Danke für Eure Hilfe!!

Gruß

Andy

Muetze1 7. Jun 2007 12:14

Re: Sockets und Zeiger....
 
1. Socket ist eine Eigenschaft und kann somit nicht als Ziel für einen Zeiger dienen, schliesslich kann sich dahinter ein Getter und/oder Setter befinden.
2. Eine Instanz ist intern schon ein Zeiger, somit lasse das ^ komplett weg...

Neutral General 7. Jun 2007 12:14

Re: Sockets und Zeiger....
 
Hi ich würds so machen:

Delphi-Quellcode:
if Socket^ = Clients[i].Socket then begin
EDIT: Oder falls das nicht nötig ist kannst du das Socket im Record direkt als TCustomWinSocket deklarieren..

Gruß
Neutral General

Dragon27 7. Jun 2007 12:16

Re: Sockets und Zeiger....
 
Hallo,


danke für Eure Antworten! Nein geht leider nicht :-(.

Mhmh wie könnte ich dann erkennen welche Client disconnected?

Danke Gruß


Andy

Apollonius 7. Jun 2007 12:28

Re: Sockets und Zeiger....
 
Du arbeitest einfach komplett ohne Zeiger! Die braucht man bei Klassen praktisch gar nicht.
Delphi-Quellcode:
TClient = record
    Socket:TCustomWinSocket; //!!!
    Nickname:String;
    free:Boolean;
Und dann ohne ^ und @ arbeiten.

Dragon27 7. Jun 2007 12:31

Re: Sockets und Zeiger....
 
Hallo,

habe das jetzt über das Handle gemacht....

Also ich speichere das Handle.... und lese es dann wieder aus zum vergleichen...

Nur bleibt das Handle auch gleich?

Habe ich nicht gewusst dass es auch ohne Zeiger geht habe ich mal bei einem Tutorial gesehen... Währe mir lieb wenn die drinbleiben könnten *g*

Danke Gruß

Andy

Apollonius 7. Jun 2007 12:36

Re: Sockets und Zeiger....
 
Wenn du zwei Klassen einander zuweist
Delphi-Quellcode:
objekt1:=objekt2;
dann zeigen die auf denselben Speicherbereich. Irgendwo war mal ein Beispiel in der Hilfe:
Delphi-Quellcode:
var Objekt1,Objekt2:TMeinObjekt;
begin
Objekt1:=TMeinObjekt.create;
Objekt1.a:=3;
Objekt2:=Objekt1; //keinen Konstruktor aufrufen, sonst gibt es ein Speicherleck!
Objekt2.a:=5;    //Jetzt hat Objekt1.a den Wert 5!
end;
Ich hoffe mal, das Beispiel hat das ein bisschen verdeutlicht.

Mit dem Handle kann man es auch machen, das bleibt soweit ich weiß immer gleich.


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