Question

Je suis en train (avec beaucoup d'aide de cette communauté) de mettre sur pied ma première application client / serveur.

J'utilise Indy 10 et Delphi Xe2, mais soupçonne que mon problème ne réside pas avec ceux-ci, mais plutôt la façon dont le travail de soockets (Wizardy et arts noirs, si vous me demandez).

Parce que je souvent frappé des points d'arrêt des exceptions et pas dans mon code avant d'appuyer sur Alt + F2 pour arrêter, mon prochain courses d'exception souvent frappé « déjà connecté » et, finalement, je reçois « trop de connexions ».

Comment puis-je bien rangé ça?

(également, quelqu'un at-il une démo qui utilise try ... except, ratehr que d'essayer ... enfin comme dans les démos Indy?)

Était-ce utile?

La solution

« déjà connecté » se produit sur le côté client lorsque vous appelez Connect() en Connected() retourne toujours vrai. Cela se produit généralement en cas de déconnexion et de laisser les données non lus dans le IOHandler.InputBuffer. Essayez d'effacer le InputBuffer avant de reconnecter. Ceci est communément rencontré, donc une mise à jour futur proche à Indy peut répondre à cette question.

« trop de connexions » signifie que vous définissez la propriété MaxConnections du serveur à une valeur positive non nulle et que de nombreux clients simultanés sont déjà connectés au serveur quand une nouvelle tente de se connecter client. Si vous ne pensez pas que vous faites que beaucoup de connexions simultanées, il signifie généralement que vous ne gérez pas les connexions correctement dans votre code serveur afin que les clients déconnectés se nettoyer correctement. La cause la plus commune de ce met les gestionnaires d'exception dans votre code qui capture et Swallow exceptions internes d'Indy à lui-même. Si vous faites des exceptions de capture, assurez-vous de re-raise toutes celles qui découlent de EIdException et laisser la poignée du serveur interne les.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top