Comment faire un socket client en attente pour le serveur de socket
Si le socket client s'ouvre avant le socket serveur, Java va générer un ConnectionException. Donc, je dois vérifier si le serveur est disponible et garder en attente avant l'exécution de
socketChannel.open(hostname, port)
dans le thread du client. J'ai trouvé une API associées:
InetAddress.getByName(hostname).isReachable()
Toutefois, cette situation ne peut pas dire si la prise sur une port est ouvert.
Je pense que ce problème devrait être bon, mais je n'ai pas d'obtenir des renseignements très utiles de Google et d'autres endroits.
intercepter l'exception. le sommeil pendant un certain temps.. l'appel à la méthode de nouveau
OriginalL'auteur qweruiop | 2013-09-04
Vous devez vous connecter pour publier un commentaire.
C'est le code pour les sonics commentaire
une panne de compteur de certains, genre que je pense être bon, ou de permettre la numérisation pour être accessibles par les méthodes de sorte que l'autre thread ne peut arrêter cette
Seulement si vous voulez donner jusqu'au bout de X tentatives. Un délai d'attente est de plus en plus courante. Je n'abandonnerai pas si c'est la connexion dont vous avez besoin sur un serveur pour fonctionner.
Vous pouvez voir un exemple avec un délai d'attente de FitNesse, qui lance un "slim" server à partir de la ligne de commande, puis des bureaux de vote pour une connexion sur le côté client: github.com/unclebob/fitnesse/blob/...
OriginalL'auteur Cruncher
Je Vais donner ce genre de gestionnaire pour votre client, je suis à l'aide de mon petit jeu.
Il sera également donner jusqu'au bout de quelques temps.
Voici l'explication du code:
J'ai d'abord déclarer deux vars, l'un est fixe et ne peut pas être modifiée lors de l'exécution, c'est le nombre maximum de tentative je veux que le client à faire avant de s'éteindre. Le second est l'actuel tentative de reconnexion.
publique de la méthode connect() est utilisé pour connecter la prise. Je vais passer à la gestion de l'exception:
Lorsqu'une connexion exception est levée, le receveur appeler la méthode de reconnexion.
La reconnexion méthode attendre 10 secondes entre chaque tentative et est appelée à chaque fois par connect() en cas d'échec.
Si la connexion est établie connect() ne fera pas appel tryToReconnect() de nouveau.
Si est impossible de se connecter en moins de 100 secondes à 10 tentatives de un toutes les 10 secondes, la sortie du programme.
pourquoi tu pense que c'est mieux une boucle? de cette façon, si une déconnexion se produire, je peux redémarrer le décompte de 10 à 0, juste mettre un
reconnections = 0
dans la fonction connect(). Si j'utilise une boucle la boucle, s'il est connecté, il sera plus difficile de faire le rapprochement...Ce n'est pas la récursivité. Tous les appels récursifs sont à la queue de leurs méthodes respectives. Le gros problème c'est que tous les reconnections rester sur la pile jusqu'à ce que vous vous connectez. si MAX_CONNECTIONS est assez grand, soit environ la moitié de la taille maximale de la pile, puis vous obtiendrez max profondeur de récursion. Il est vraiment utilisé comme un goto, mais mange de la pile. Goto jumeau maléfique.
idée de comment résoudre ce problème?
J'ai peur que ce code va jeter un unhandle exception qui est "StackoverflowError". Tout comme ce que EJP dit, recusion n'est pas approprié ici. Il est préférable de boucle dans la méthode originale.
OriginalL'auteur Gianmarco