Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Listbox Inhalt von Server zum clienten schicken??? (https://www.delphipraxis.net/120495-listbox-inhalt-von-server-zum-clienten-schicken.html)

DeddyH 12. Sep 2008 15:28

Re: Listbox Inhalt von Server zum clienten schicken???
 
In Deinem Delphi-Verzeichnis sollte es einen Ordner "Demos" geben. Da sind manche Schätzchen drin.

htxmlx 12. Sep 2008 15:29

Re: Listbox Inhalt von Server zum clienten schicken???
 
KK da guck ich mal nach...

Gruß, htxmlx

htxmlx 12. Sep 2008 16:49

Re: Listbox Inhalt von Server zum clienten schicken???
 
Habs gefunden und mir angesehen und versucht nachzuvollziehen, aber da dort keine Kommentare oder sonstiges stehen hab ichs i-wie net verstanden, könntest du so freundlich sein und mir in ein zwei sätzen nochmal erläutern was genau ein thread ist und was er bewirkt, also anwendungsweise...das wäre nett.

Gruß, htxmlx

DeddyH 12. Sep 2008 16:53

Re: Listbox Inhalt von Server zum clienten schicken???
 
Ein Thread ist eine Art "Kindprozess", den Du quasi vom Hauptprogramm abspalten kannst (z.B. das Drucken im Hintergrund, während der Hauptthread bereits weiterarbeitet).

htxmlx 12. Sep 2008 16:55

Re: Listbox Inhalt von Server zum clienten schicken???
 
ok thx, aber wie sollte ich das hier anwenden, also was würde das hier bringen um den nachrichten stau zu verhindern?

Gruß, htxmlx

DeddyH 12. Sep 2008 17:03

Re: Listbox Inhalt von Server zum clienten schicken???
 
Na gut, gehen wir mal weg von den Threads. Ich habe es nicht mehr im Kopf, aber konnte man bei den Socket-Komponenten nicht irgendwie die Gegenstelle abfragen? Dann wäre es doch recht einfach zu schauen, ob man von der Gegenstelle bereits einen Eintrag hat. Ansonsten poste doch mal den Code zum Bestücken der Listbox.

htxmlx 12. Sep 2008 17:24

Re: Listbox Inhalt von Server zum clienten schicken???
 
Ich poste einfach mal den Code also wenn ein user drauf geht oder runter geht passiert folgendes
Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
i: Integer;
Text: String;
begin
Clients.Items.Clear;
For I := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
begin
with ServerSocket1.Socket.Connections [I] do
if (Connected) then SendText('#55');
end;
end;
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
  var test: Integer;
begin
Clients.Items.Clear;
For test := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
begin
with ServerSocket1.Socket.Connections [test] do
if (Connected) then SendText('#55');
end;
end;
Erläuterung, also wenn einer runter geht oder drauf geht dann wird die listbox(namens clients) gelöscht und an alle clienten die message '#55' gesendet.
Empfängt ein client diese message wird bei diesem ebenfalls die lsitbox gelöcht und eine message mit
'#99'+Nickname an den server gesendet...
der server empfängt '#99' und weiss das es sich um einen nickname handelt also füft er diesen bei sich in der listbox ein und sendet die nachricht mit '#99'+nickname an alle clienten..
alle clienten empfangen also die messages mit dem '#99' und fügen diese somit auch bei sich in die listbox ein

eigentich ganz simpel, es funktioniert ja auch alles bis auf das problem, dass alle clienten bei mir im test 4 zur gleichen zeit ihre '#99'nickname messages senden..

beim clienten sieht das dann so aus
Delphi-Quellcode:
procedure TForm1.OnClientRead(Sender: TObject; Socket: TCustomWinSocket);
var Text:string;
begin
Text:=Socket.ReceiveText;
Form1.Show;
if (Length(Text) > 2) and (Copy(Text,1,3) = '#77') then
Memo1.Lines.Add(Text);
if (Length(Text) > 2) and (Copy(Text,1,3) = '#99') then
Listbox1.AddItem(Text,Socket);
if (Length(Text) > 2) and (Copy(Text,1,3) = '#55') then
Listbox1.Items.Clear;
if (Length(Text) > 2) and (Copy(Text,1,3) = '#55') then
ClientSocket1.Socket.SendText('#99' + NickName);
end;
die codes: #77 - eine normale chat message
#99 - ein nickname
#55 - befehl zum online liste aktualisiern


ich hoffe du kannst dich da eindeken und verstehst das

Gruß, htxmlx

DeddyH 12. Sep 2008 17:40

Re: Listbox Inhalt von Server zum clienten schicken???
 
Wäre es nicht besser, sich eine Klasse zu erstellen, in der man sich die Remote-Adresse samt des entsprechenden Nicknamen merkt und diese in die Listbox einfügt? Wenn sich jemand abmeldet, kannst Du ihn dann eindeutig identifizieren und nur dessen Eintrag aus der Listbox löschen. Erscheint mir sinnvoller, als jedesmal die komplette Liste neu aufzubauen.

htxmlx 12. Sep 2008 17:51

Re: Listbox Inhalt von Server zum clienten schicken???
 
Hat aber einen Nachteil da man seine IP doch relativ einfach ändern kann...gibt es nicht ne lösung wie man das nachrichten senden der einzelnen clienten vielleicht untereinandern verzögern könnte?

Gruß, htxmlx

htxmlx 12. Sep 2008 18:42

Re: Listbox Inhalt von Server zum clienten schicken???
 
ich bräuchte theoretisch einen delay der zwischen dem empfangen der '#55' message und dem senden des nicknames steht...dieser müsste sich aber pro client um 100ms erhöhen oder so...? ginge sowas?

Gruß, htxmlx


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:45 Uhr.
Seite 4 von 5   « Erste     234 5      

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