Einzelnen Beitrag anzeigen

htxmlx

Registriert seit: 23. Aug 2008
124 Beiträge
 
Delphi 7 Enterprise
 
#37

Re: Listbox Inhalt von Server zum clienten schicken???

  Alt 12. Sep 2008, 17:24
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
  Mit Zitat antworten Zitat