2010-08-10 3 views
3

Je dois écrire un TCP Client qui aura la capacité de se reconnecter au serveur. Le serveur peut être indisponible en raison d'une mauvaise qualité de la connexion réseau ou de problèmes de maintenance. Je suis à la recherche de solutions de qualité dans ce domaine.Implémentation correcte du client de reconnexion TCP C#

Mes solutions actuelles est le suivant:

  • garder l'état de connexion dans ConnectionState ENUM {Hors ligne, en ligne, Connexion}
  • créer client TcpClient classe.
  • créer deux minuteries appelés ConnectionCheckTimer et ReconnectTimer
  • connecter au serveur
  • thread lecteur démarrage
  • et vérifier la lecture minuterie
  • de connexion est réalisée avec tcpClient.GetStream(), puis la lecture de ce flux
  • quand Exception est intercepté dans l'état du lecteur readerLoop l'état du client est déconnecté et ReconnectTimer est lancé
  • ConnectionCheckTimer vérifie périodiquement lastMessageTimestamp et le compare à l'heure actuelle si l'intervalle est supérieur à maxValue il lau Nches ReconnectTimer

Actuellement, je ne suis pas satisfait de cette solution car elle génère encore des exceptions, par exemple ObjectDisposedException sur TcpClient.NetworkStream. Je suis à la recherche d'une implémentation de client de reconnexion Tcp propre et réutilisable capable de gérer tous les problèmes de socket qui peuvent se produire lors de la connexion, la déconnexion, la lecture de données.

Répondre

1

Si vous avez des problèmes de connexion, vous aurez toujours des exceptions. Je pense que vous avez un aperçu sonore, vous avez juste besoin de gérer les exceptions. Vous pouvez commencer avec votre propre implémentation de classe Socket et écrire le serveur TCPIP. Code de démarrage est à MS:

http://msdn.microsoft.com/en-us/library/fx6588te(VS.71).aspx

Le code C# est à mi-chemin sur la page VB.