![]() |
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:
Verbindung trennen:
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;
Delphi-Quellcode:
Was mache ich denn da falsch? Sollte doch eigentlich so funktionieren, oder nicht?
procedure TForm1.disconnect;
begin IdTCPClient1.Disconnect; end; 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. |
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: |
Re: Connect / Disconnect bei IdTCPClient
Hi,
lass mal bitte die Zeilen :
Delphi-Quellcode:
weg, so sollte es gehen :
BoundIP := '192.168.123.113';
BoundPort := 2001;
Delphi-Quellcode:
Denn 2 x der gleiche BoundPort geht nicht,
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; Greetz Data |
Re: Connect / Disconnect bei IdTCPClient
Danke für eure Antworten. :thumb:
Werde es ausprobieren, sobald ich wieder dazu komme. |
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 |
Re: Connect / Disconnect bei IdTCPClient
Zitat:
Danke!! |
Re: Connect / Disconnect bei IdTCPClient
Hallo ralfiii,
Zitat:
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 17:41 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