![]() |
Re: Listbox Inhalt von Server zum clienten schicken???
In Deinem Delphi-Verzeichnis sollte es einen Ordner "Demos" geben. Da sind manche Schätzchen drin.
|
Re: Listbox Inhalt von Server zum clienten schicken???
KK da guck ich mal nach...
Gruß, htxmlx |
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 |
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).
|
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 |
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.
|
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:
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.
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; 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:
die codes: #77 - eine normale chat message
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; #99 - ein nickname #55 - befehl zum online liste aktualisiern ich hoffe du kannst dich da eindeken und verstehst das Gruß, htxmlx |
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.
|
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 |
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 16:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz