Frage

Ich versuche (mit viel Hilfe dieser Community), meine erste Client/Server -App zusammenzustellen.

Ich benutze Indy 10 und Delphi XE2, aber mein Problem lügen nicht mit diesen, sondern mit der Funktionsweise von Soockets (Zauberer und schwarze Kunst, wenn Sie mich fragen).

Da ich oft Breakpoints von Ausnahmen getroffen habe und meinen Code durch den Code trete, bevor ich Alt+F2 drücke, um zu stoppen, traf meine nächsten Läufe oft eine Ausnahme "bereits verbunden" und schließlich bekomme ich "zu viele Verbindungen".

Wie kann ich das aufräumen?

(Hat jemand eine Demo, die Versuch verwendet ... außer Ratehr als Versuch ... schließlich wie in der Indy -Demos?)

War es hilfreich?

Lösung

"Bereits angeschlossen" tritt auf der Clientseite auf, wenn Sie anrufen Connect() während Connected() Gibt immer noch wahr. Dies tritt normalerweise auf, wenn Sie ungelesene Daten in der trennen und hinterlassen IOHandler.InputBuffer. Versuchen Sie, das zu räumen InputBuffer Vor der Wiederverbindung. Dies tritt häufig auf, sodass ein Update der Nahkompetenz für Indy dieses Problem angehen kann.

"Zu viele Verbindungen" bedeutet, dass Sie den Server festlegen MaxConnections Eigenschaft zu einem positiven Wert ungleich Null und dass viele gleichzeitige Clients bereits mit dem Server verbunden sind, wenn ein neuer Client versucht, eine Verbindung herzustellen. Wenn Sie nicht glauben, dass Sie so viele gleichzeitige Verbindungen herstellen, bedeutet dies normalerweise, dass Sie die Verbindungen in Ihrem Servercode nicht korrekt verwalten, sodass die Kunden nicht korrekt gereinigt werden. Die häufigste Ursache dafür ist, Ausnahmebehandler in Ihren Code zu setzen, die die internen Ausnahmen von Indy für sich selbst fangen und schlucken. Wenn Sie Ausnahmen fangen EIdException und lassen Sie den Server ihn intern verarbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top