AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Server: Socket-Fehler # 10054
Thema durchsuchen
Ansicht
Themen-Optionen

Server: Socket-Fehler # 10054

Ein Thema von Master of Phoenix · begonnen am 28. Sep 2007 · letzter Beitrag vom 5. Apr 2008
 
Benutzerbild von everdream
everdream

Registriert seit: 22. Feb 2007
Ort: Hiddenhausen
192 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Server: Socket-Fehler # 10054

  Alt 3. Apr 2008, 18:01
Man muss doch eigentlich immer damit rechnen, dass ein Client auch mal ohne Abmeldung verschwindet... Außerdem gibts doch extra das OnDisconnect Event. Naja, jedenfalls habe ich das selbe Problem wie MoP.

Ich hatte zuerst einen TCPServer benutzt, nachdem ich die Beiträge hier gelesen hatte, habe ich es dann mit einem IRCServer probiert und auch AContext.Connection.CheckForGracefulDisconnect(tru e); eingebaut. Leider ohne Erfolg. Hier erstmal mein Code:

Delphi-Quellcode:
var
  Server: TServer;
  ClientIDs: set of byte;
  Clients: Array[0..255] of TLWPClient;

implementation

{$R *.dfm}

procedure TServer.BtServerClick(Sender: TObject);
begin
  if IRCServer.Active then begin
    IRCServer.Active:=false;
    BtServer.Caption:='Starten';
    Memo.Lines.Add('Server gestoppt.');
  end else begin
    try
      IRCServer.DefaultPort:=strtoint(EdPort.text);
      IRCServer.Active:=true;
      BtServer.Caption:='Stoppen';
      Memo.Lines.Add('Server gestartet (Port: ' + EdPort.text + ').');
    except
      Memo.Lines.Add('Server konnte nicht gestartet werden.');
    end;
  end;
end;

procedure TServer.IRCServerConnect(AContext: TIdContext);
var
  tmpClient: TLWPClient;
  i: byte;
begin
  tmpClient:=TLWPClient.Create;
  while ((i<255) and (i in ClientIDs)) do Inc(i);
  tmpClient.ID:=i;
  tmpClient.IP:=AContext.Binding.PeerIP;
  AContext.Data:=TObject(i);
  Clients[i]:=tmpClient;
end;

procedure TServer.IRCServerDisconnect(AContext: TIdContext);
begin
  AContext.Connection.CheckForGracefulDisconnect(true);
  Clients[Byte(AContext.Data)].Destroy;
  ClientIDs:=ClientIDs - [Byte(AContext.Data)];
end;

end.
Wenn ich den Server und einen zugehörigen Client starte, verbinde und dann wieder trenne, bekomme ich folgende Meldungen:
1.) (Von Delphi)
Zitat:
Debugger Exception Notification

Project TheServer.exe raised exception class EIdSocketError with Message 'Socket Error # 10054 Connection reset by peer.'.
2.) (Vom Programm)
Zitat:
Application Error

Exception EAccessViolation in module TheServer.exe at 0000031BA.
Access coilation at address 004031BA in module 'TheServer.exe'. Read of address 00000040
3.) (Auch vom Programm)
Zitat:
Application Error

Exception EOSError in module TheServer.exe at 0000CB89.
System Error. Code: 5.
Zugriff verweigert.
Danach wird das Programm beendet.

Wäre schön, wenn jemand da einen Rat hätte.
Max
"Das Ziel ist im Weg!"
  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 16:38 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