Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Connect / Disconnect bei IdTCPClient (https://www.delphipraxis.net/127446-connect-disconnect-bei-idtcpclient.html)

divBy0 13. Jan 2009 14:16


Connect / Disconnect bei IdTCPClient
 
Hallo!

Eine TCP-Verbindung mit IdTCPClient aufzubauen funktioniert ganz gut, allerdings habe ich ein Problem, wenn ich die Verbindung trenne und gleich wieder aufbauen möchte. Dann bekomme ich einen 'Socket Error # 10048 Address already in use.'.

Verbindung aufbauen:
Delphi-Quellcode:
procedure TForm1.connect;
begin
  with IdTCPClient1 do
  begin
    BoundIP := '192.168.123.113';
    BoundPort := 2001;
    Host := '192.168.123.150';
    Port := 2000;
    ConnectTimeout := 2000;
    Connect;
  end;
end;
Verbindung trennen:
Delphi-Quellcode:
procedure TForm1.disconnect;
begin
  IdTCPClient1.Disconnect;
end;
Was mache ich denn da falsch? Sollte doch eigentlich so funktionieren, oder nicht?
Es scheint wohl irgendwie an dem disconnect zu hängen.

Bin für jede Hilfe dankbar!

Gruß
Marc

EDIT: Ich nutze Delphi2007 und Indy 10.

hincapie 14. Jan 2009 08:02

Re: Connect / Disconnect bei IdTCPClient
 
Könnte an dem ConnectTimeout liegen...

Neuer Verbindungsaufbau ist nur dann möglich, wenn die angegebene Zeit abgelaufen ist.. :gruebel:

DataCool 15. Jan 2009 23:31

Re: Connect / Disconnect bei IdTCPClient
 
Hi,

lass mal bitte die Zeilen :
Delphi-Quellcode:
  BoundIP := '192.168.123.113';
  BoundPort := 2001;
weg, so sollte es gehen :

Delphi-Quellcode:
procedure TForm1.connect;
begin
  with IdTCPClient1 do
  begin
    // BoundIP := '192.168.123.113';
    // BoundPort := 2001;
    Host := '192.168.123.150';
    Port := 2000;
    ConnectTimeout := 2000;
    Connect;
  end;
end;
Denn 2 x der gleiche BoundPort geht nicht,

Greetz Data

divBy0 16. Jan 2009 10:04

Re: Connect / Disconnect bei IdTCPClient
 
Danke für eure Antworten. :thumb:

Werde es ausprobieren, sobald ich wieder dazu komme.

Assertor 13. Jan 2010 14:45

Re: Connect / Disconnect bei IdTCPClient
 
Hallo,

ich hol den Thread mal hoch, um das technisch klar zu machen:

Wenn der Socket geschlossen wird, geht dieser in den FD_WAIT State bis WinSock (Windows) ihn freigibt. Und so lange ist es nicht möglich, die gleiche Verbindung erneut aufzubauen:

Wichtig ist für WinSock die Kombination aus Source IP, Source Port, Ziel IP und Ziel Port. Sind alle 4 identisch und ein Socket ist mit diesen Parameters noch im FD_WAIT, gibt es die Fehlermeldung WSAEADDRINUSE (10048). Intern geschieht dies im Bind(), kann aber auch erst im Connect() auftreten (laut MSDN und leidlicher Praxis).

Ergo, wer BoundIP und BoundPort nutzt, sollte sich klar machen, das ein 10048 wahrscheinlich wird. Ohne diese Parameter überlässt man es WinSock eine geeignete lokale IP und Port zu nehmen, spart sich also eine Menge Probleme.

Gruß Assertor

ralfiii 28. Jan 2010 12:31

Re: Connect / Disconnect bei IdTCPClient
 
Zitat:

Zitat von Assertor
Ergo, wer BoundIP und BoundPort nutzt, sollte sich klar machen, das ein 10048 wahrscheinlich wird. Ohne diese Parameter überlässt man es WinSock eine geeignete lokale IP und Port zu nehmen, spart sich also eine Menge Probleme.

Kann mir jemand mal erkären was bei einem TIdTcpClient der BoundPort soll, wo ich doch sowieso die Property "Port" auch einstelle?!?

Danke!!

Assertor 28. Jan 2010 12:35

Re: Connect / Disconnect bei IdTCPClient
 
Hallo ralfiii,

Zitat:

Zitat von ralfiii
Zitat:

Zitat von Assertor
Ergo, wer BoundIP und BoundPort nutzt, sollte sich klar machen, das ein 10048 wahrscheinlich wird. Ohne diese Parameter überlässt man es WinSock eine geeignete lokale IP und Port zu nehmen, spart sich also eine Menge Probleme.

Kann mir jemand mal erkären was bei einem TIdTcpClient der BoundPort soll, wo ich doch sowieso die Property "Port" auch einstelle?!?

Danke!!

Klar, gerne!!! :mrgreen:

Port = Zielport
Host = Zielhost/IP

BoundPort = Lokaler Quellport
BoundIP = Lokaler Quell-IP

Halt TCP/IP - es gibt immer eine Kombination von IP/Port sowohl für den Absender als auch für den Empfänger.

Gruß Assertor

Edits: Tippfehler...


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:37 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