AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Client / Server automatischer aufbau vom Client
Thema durchsuchen
Ansicht
Themen-Optionen

Client / Server automatischer aufbau vom Client

Ein Thema von Thomas83 · begonnen am 17. Okt 2008 · letzter Beitrag vom 20. Okt 2008
 
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#1

Client / Server automatischer aufbau vom Client

  Alt 17. Okt 2008, 14:41
servus,

nach wie vor sitze ich an meiner Client / Server Anwendung.
Es kommen immer wieder neue Probleme
Der Client und der Server ist eine Threadklasse.

Problem 1
Der Client läuft auf meinem Notebook und der Server auf meinem anderen Computer.
Wenn ich das Netzwerkkabel am Notebook ziehe, bekommt der Server das nicht mit also auch kein OnError.

Läuft der Server je doch auf dem Notebook und ich ziehe das Kabel, wird das OnError ausgelöst und die Clientliste wird aktualisiert.

Problem 2
Der Server läuft, der Client verbindet sich. Anzeige beim Server "Clients Online 1". Ziehe ich das Kabel und stecke es nach x sekunde wieder ein, verbindet sich der Client wieder. Entweder habe ich dann stehen "Clients Online 2" oder auch mal "Clients Online 5" obwohl nur ein client sich anmeldet....das heist der "alte" wird nicht gelöscht.... aber warum 5, habe ich active zu oft aufgerufen?

Hier ein paar codeschnipsel
Delphi-Quellcode:
procedure TThreadServer.OnClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: ErrorEvent; var ErrorCode: Integer);
begin
  Socket.Close;
  ErrorCode := 0;
  Synchronize(SyncServerInfo);
end;

procedure TThreadServer.Execute;
var
  MSG : TMsg;
begin
  inherited;
 
  while ( GetMessage(msg, 0, 0, 0) ) do
    DispatchMessage(msg);
end;


 
procedure TThreadClient.OnClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: ErrorEvent; var ErrorCode: Integer);
begin
  socket.Close;
  ErrorCode := 0;
end;

procedure TThreadClient.OnTimer(Sender: TObject);
var
  i : integer;
begin
  if fClient.Active then
  begin
    //Jobs die zum Server gesendet werden
    if fJobOutList.Count-1 > -1 then
    begin
      //Erst mit einem Ping testen ob Verbindung besteht.
      fPingPong.SendePing;
      //...
      //Ist Pong angekommen?
      if fPingPong.Pong then
      begin
        //Daten senden
      end else begin
        fClient.Socket.Close;
        fClient.Active := false;
      end;
    end;
  end;
  //Noch Online?
  if not fClient.Active then begin
    Synchronize(SetClientOnline); //<- wieder verbinden also nur "fClient.Active := true"
    while not fClient.Active do
    begin
      sleep(100);
      inc(i);
      if i=20 then break;
    end;
    if not fClient.Active then fClient.Active := false;
  end;
end;
Wenn ihr mehr infos oder sourcen braucht einfach sagen was....
thx
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 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 by Thomas Breitkreuz