Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TIdTCPClient.Connected bringt Socketerror (https://www.delphipraxis.net/128044-tidtcpclient-connected-bringt-socketerror.html)

Angel4585 23. Jan 2009 07:16


TIdTCPClient.Connected bringt Socketerror
 
Hallo,

ich habe das Problem, dass ich meinen Client zum Server verbinde und den Server dann einfach zu mache.

Beim Client habe ich eine Methode:

Delphi-Quellcode:
if FClient.Connected then
.
.
Seltsamerweise kommt wenn ich diese Connected Funktion aufrufe ein Socketfehler 10054 anstatt einfach nur einem false.

Jetz die Fragen: An was liegt das? Wie handhabt man das am besten?

Ich habe jetz einfach die Exception abgefangen, was aber mMn keine schöne Lösung ist.

Relicted 23. Jan 2009 07:49

Re: TIdTCPClient.Connected bringt Socketerror
 
Hi,

interessant wäre noch die Indy Version. Vielleicht solltest du mal tiefer rein debuggen und schauen bei welcher Zeile im Code bei den Indys das auftritt. Mit der Fehlerbeschreibung lässt sich leider nicht sooo viel anfangen.

Gruß
reli

Angel4585 23. Jan 2009 08:19

Re: TIdTCPClient.Connected bringt Socketerror
 
Indy Version 10, wo seh ich welche genau das ist?

Der Letzte Eintrag im Log + Die Stelle wo die Exception auftritt:

Delphi-Quellcode:
{ $Log: 11952: IdIOHandlerStack.pas
{
{   Rev 1.50    6/18/04 1:06:58 PM RLebeau
{ Bug fix for ReadTimeout property}

.
.
.

function TIdIOHandlerStack.ReadFromSource(
 ARaiseExceptionIfDisconnected: Boolean; ATimeout: Integer;
 ARaiseExceptionOnTimeout: Boolean): Integer;
.
.
.
SetLength(LBuffer, RecvBufferSize); try
LByteCount := Binding.Receive(LBuffer);//Hier drin wird die Exception geschmissen
SetLength(LBuffer, LByteCount);
Die Funktion kommt irgendwann hier an:
Delphi-Quellcode:
function TIdStackBSDBase.CheckForSocketError(const AResult: Integer): Integer;
begin
  if AResult = Id_SOCKET_ERROR then begin
    RaiseLastSocketError;
  end;
  Result := AResult;
end;

Angel4585 23. Jan 2009 08:55

Re: TIdTCPClient.Connected bringt Socketerror
 
Ach wenn ich das Programm geschlossen habe wurde das Destroy meiner Serverklasse nicht ausgeführt.
Sollte das dann nicht automatisch ausgeführt werden, auch wenn ich vergessen habe das Serverobjekt freizuugeben?
(Habs jetz natürlich im FormDestroy freigegeben, aber geht eher ums Prinzip)

Wobei es natürlich auch ohne freigeben des Serverobjektes sauber funktionieren muss, da der Server ja auch abgeschossen werden, oder das Netzwerkkabel gezogen werden kann und ich dann auch nicht irgendwelche Exceptions sehen möchte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 Uhr.

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