ich hab ein kleiners problem mit meinem chatpinger
ich habe das jetzt so gemacht das der client nach dem einloggen einen ping sendet (das bedeutet er möchte die liste mit allen namen die es im chat gibt). wenn der server den Ping empfängt sendet er an alle clients nochmal einen Ping. wenn der client jetzt einen ping empfängt dan senden alle clients ihren nick mit einem 'pong' davorstehend. wenn der server jetzt diesen 'pong' empfängt sendet er diesen (den pong mit nick "pongNICK") nun wieder an alle clients und diese legen jetzt den angehängten Nick in ihr Memo2.
also hier sendet der client seinen ping
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure PingSenden(ping: string); begin SendText('ping' + ping); //die procedur um den ping zu senden end;
procedure TForm1.verbinden1Click(Sender: TObject); var i : integer; begin client.Active := true; // der client geht online
statusbar1.Panels[1].Text := 'paswortabfrage'; for i := 1 to 100000 do //der client wartet ne kleine weile Application.ProcessMessages;
PingSenden(uUserverbindung.Userverbindung.Edit1.Text); // der ping wird gesendet (mit Nick anhang)
end; |
hier empfängt der server den ping
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure IfTypmsgPing(text: string; i :integer); begin for i:=0 to Form1.Server.Socket.ActiveConnections-1 do begin Form1.Server.Socket.Connections[i].SendText(text); //senden des pinges mit Nickanhang end;
end;
procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket); var msg, typmsg: string; var i: integer; begin msg := Socket.ReceiveText; typmsg := msg[1]+msg[2]+msg[3]+msg[4]; //hier steht der anfang / also 'ping'
if typmsg = 'ping' then //guckt ob es ein ping ist IfTypmsgPing(msg,0);
end; |
nun bekommt der client den ping
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure PingEmpfangen(ping: string); begin sendText('pong' + uUserverbindung.Userverbindung.Edit1.Text); //nun wird der pong mit Nick anhang gesendet form1.Memo2.Text := ''; // der bereich wo die Nick's hin kommen wird leehr gemacht da neue kommen end;
procedure TForm1.clientRead(Sender: TObject; Socket: TCustomWinSocket); var msg, typmsg: string; begin msg := Socket.ReceiveText; typmsg := msg[1]+msg[2]+msg[3]+msg[4];
if typmsg = 'ping' then begin PingEmpfangen(msg); end;
end; |
nun bekommt der server den pong
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure IfTypmsgPong(text: string; i :integer); begin
for i:=0 to Form1.Server.Socket.ActiveConnections-1 do begin Form1.Server.Socket.Connections[i].SendText(text); //sendet den pong an alle klients end;
end;
procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket); var msg, typmsg, arria: string; var i: integer; begin msg := Socket.ReceiveText; typmsg := msg[1]+msg[2]+msg[3]+msg[4];
if typmsg = 'pong' then //abfrage nach dem MSGtypen / wenn userliste IfTypmsgPong(msg,0);
end; |
der client stellt alle nicks rein
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure PongEmpfangen(pong: string); begin Delete(pong, 1, 4); Form1.Memo2.Lines.Add(pong); //der nick wird ins Memo2 gepackt end;
procedure TForm1.clientRead(Sender: TObject; Socket: TCustomWinSocket); var msg, typmsg: string; begin msg := Socket.ReceiveText; typmsg := msg[1]+msg[2]+msg[3]+msg[4];
if typmsg = 'pong' then //abfrage nach dem MSGtypen / wenn Ping /userliste begin PongEmpfangen(msg); end;
end; |
nach deisem ganzen code gewirrwar hoffe ich blickt noch jemand durch,
naja auf jeden fall ist ist das problem das der client, der sich als letztes einloggt nicht alle Nicks bekommt sondern nur seinen
vieleicht kann mir einer sagen wie ich das besser machen kann .... danke
sry aber ich wusste nicht ob ich jetzt einen neuen thread aufmachen sollte oder in den alten schreiben, aber da mir ma gesagt wurde das ich für jede frege nen neuen amchen soll hab ichs gemacht

Am ende sterben eh alle ................