Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Namen erscheinen gehen aber nicht weg (https://www.delphipraxis.net/130759-namen-erscheinen-gehen-aber-nicht-weg.html)

luckys41 12. Mär 2009 18:34


Namen erscheinen gehen aber nicht weg
 
Hey,

Zu meinem Problem, von meiner Nickliste in meinem Chat.

Durch folgenden Code werden die Clients aufgelistet

Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
  var
  voice: OLEVariant;
begin
label1.Caption := ServerSocket1.Socket.Connections[Listbox1.Items.Count].RemoteAddress;
Listbox1.Items.Add(label1.caption);
memo1.Lines.Add('Neuer Client hat sich verbunden : '+label1.caption+' .');
mediaplayer1.FileName := 'Sounds/connect.wav';
mediaplayer1.Open;
mediaplayer1.Play;
end;
Und beim Client so

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if (ClientSocket1.Socket.Connected = false) then begin

ClientSocket1.Active := true;

end

else begin

timer1.Enabled := false;
end;
end;

OnClientdisconnect :

Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
bitbtn2.Click;
listbox1.Items.Clear;
bitbtn2.Click;
ServerSocket1.Active := false;
bitbtn2.Click;
ServerSocket1.Active := true;
bitbtn2.Click;
bitbtn2.Enabled := false;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
SelectedVictim := -1;
Memo1.Lines.Add('Verbindung getrennt mit : '+label1.Caption+' .');
end;
Nur wenn der Client das Programm offen lässt und z.B einfach den Computer herunterfährt, bleibt der Client in der Liste obwohl er garnichtmehr verbunden ist.

Gibt es da noch eine Funktion ala Timeout , oder wie kann mann sich da behelfen?

Mit freundlichen Grüßen,
luckys41

nuclearping 12. Mär 2009 18:41

Re: Namen erscheinen gehen aber nicht weg
 
Clients anpingen.

Und gewöhn dir bitte 'ne ordentliche Code-Formatierung an! *schauder* :pale:

luckys41 12. Mär 2009 19:21

Re: Namen erscheinen gehen aber nicht weg
 
Soweit so gut.

Server :
:cheers:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var i:Integer;
begin
  with ServerSocket1 Do
  begin
    for i:=0 to Socket.ActiveConnections Do
    begin
      Socket.SendText('PING');
    end;
  end;
end;
Client :

Delphi-Quellcode:
  if str = 'Ping' then
   begin Socket.SendText('PONG');
   end else
   begin
   Socket.SendText('Off');
   end;
Und wie kann ich jetzt die Nachricht Off verarbeiten beim Server?

Dunkel 12. Mär 2009 19:23

Re: Namen erscheinen gehen aber nicht weg
 
Server pingt - Client antwortet : alles OK
Server pingt - Client antwortet nicht : Ups, da ist wohl wer offline, den nehm ich mal aus der Liste raus.

luckys41 12. Mär 2009 19:25

Re: Namen erscheinen gehen aber nicht weg
 
Dankeschön für die Antworten.

Aber könnt ihr mir vielleicht einen Code Schnipsel zeigen wie sowas beim Server geht?

nuclearping 12. Mär 2009 19:36

Re: Namen erscheinen gehen aber nicht weg
 
Mit Code-Schnipsel ist das schwer abzuhandeln.

Du brauchst ein Zeitfenster, in der der Klient antworten muss. Wird es überschritten, kann man davon ausgehen, dass der Klient off ist.

luckys41 12. Mär 2009 19:56

Re: Namen erscheinen gehen aber nicht weg
 
Hab es jetzt so

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var i:Integer;
begin
  with ServerSocket1 Do
  begin
    for i:=0 to Socket.ActiveConnections Do
    begin
      Socket.SendText('PING');
    end;

  end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
 IF Serversocket1.Socket.Connections[SelectedVictim].ReceiveText = 'On' then
      begin end else begin
listbox1.items.delete(selectedvictim);
end;
end;
Client :

Delphi-Quellcode:
   if str = 'Ping' then
   begin
    Socket.SendText('On');
   end;
Aber es kommt immer die Fehlermeldung

Windows socket error: Eine Anforderung zum Senden oder Empfangen von Daten wurde verhindert, da der Socket nicht verbunden ist und (beim Senden über einen Datagrammsocket mit einem sendto-Aufruf) keine Adresse angegeben wurde (10057)

craash 12. Mär 2009 21:30

Re: Namen erscheinen gehen aber nicht weg
 
es muss heißen
Delphi-Quellcode:
for i:=0 to Socket.ActiveConnections[b]-1[/b] Do
/edit1: im übrigen würde ich dir ans herz legen, das hier mal zu überfliegen :wink:

/edit2: wieso stellst du eigentlich nicht einfach in das disconnect-event des serversockets, dass der client aus der listbox genommen wird? :gruebel:

luckys41 13. Mär 2009 12:03

Re: Namen erscheinen gehen aber nicht weg
 
Funktioniert leider auch nicht :/

craash 13. Mär 2009 19:00

Re: Namen erscheinen gehen aber nicht weg
 
eine zeilenangabe wo der fehler auftritt wäre sinnvoll


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 Uhr.
Seite 1 von 2  1 2      

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