Comment reconnecter les clients vers le serveur?
Mon programme serveur (socket stream) est en cours d'exécution et il accepte les clients. En raison de certaines conditions anormales, server est bientôt terminé. De l'autre côté, les clients sont en attente de réponse du serveur.
Comment je reconnecte l'exécution de clients sur le nouveau serveur? toutes les fonctions dans les sockets?
Vous souhaitez vous connecter les clients à un serveur? Sens, si le serveur A été démarré, les clients connectés à Un serveur, serveur Un est mort, le serveur B commencé, vous souhaitez que les clients à se connecter au serveur B?
De nouveau je lance le serveur
Vos programmes sont toujours sur la même machine?
Le serveur de connecter deux ou plus de clients que l'arrêt du serveur(pas de travail) et le client en attente de réponse du serveur et de nouveau j'exécute le même programme de serveur de se connecter à l'exécution de clients
double possible de la Réutilisation de descripteur de socket sur l'échec de la connexion
De nouveau je lance le serveur
Vos programmes sont toujours sur la même machine?
Le serveur de connecter deux ou plus de clients que l'arrêt du serveur(pas de travail) et le client en attente de réponse du serveur et de nouveau j'exécute le même programme de serveur de se connecter à l'exécution de clients
double possible de la Réutilisation de descripteur de socket sur l'échec de la connexion
OriginalL'auteur loganaayahee | 2013-04-25
Vous devez vous connecter pour publier un commentaire.
Un socket qui avait été
connect()
ed une fois ne peut pas être réutilisés avec un autre appel àconnect()
.Les étapes pour vous connecter à un serveur TCP et de lire/écrire des données se présente comme suit (pseudo-code):
Dans le cas où le serveur tombe en panne après
connect
le client peut et doit faire est deet puis recommencer au début avec:
De commencer sur et à partir d':
serait probablement conduire à un comportement indéterminé, mais à moins d'une erreur.
OriginalL'auteur alk
référencé par Advanced programming in the unix Environment livre.
Vous pouvez également utiliser:
SO_REUSEADDR
danssetsockopt()
. Il permet de réutiliser les adresses locales.N'est-ce pas l'OP parle le cas, que le serveur tombe en panne après avoir connecté avec succès?
OriginalL'auteur Vidya
Permettez-moi de commencer par dire que tout est possible. Il y a une fonction qui le fait pour vous. C'est la même
se connecter
que vous avez utilisé pour votre client TCP. Vous avez juste besoin de penser à quand vous avez besoin d'appeler ce nouveau de vous connecter.Donc quand dois-je utiliser que
connect
fonction maintenant?Permettez-moi de présenter une solution possible.
Vous avez besoin d'avoir une sorte de logiciel de surveillance (peut-être un démon) qui assure le suivi de l'état du processus du serveur. Il pourrait dire, de façon périodique, en cognant sur les processus de serveur pour voir si il est vivant.
Prenons le cas d'un seul client et le serveur. Le client est en cours d'exécution sur Un système; le serveur, sur le système B.
Dire que le serveur a couru et s'est écrasé juste avant qu'il
recv
ed quoi que ce soit. Cela signifie que le client aurait correctement connecté au serveur et de sessend
échouera. Lorsque lesend
échoue, vous pouvez communiquer avec le logiciel de surveillance sur le système B pour voir ce qui s'est passé.Si le logiciel d'analyse des rapports qu'il n'a pas trouver quelque chose de mal avec le serveur, quelque chose s'est mal passé ensuite (peut-être une interruption, votre carte réseau est allé kaput, peu importe). Ces raisons sont à l'extérieur de la portée de cette discussion.
Si votre logiciel de surveillance répond en disant qu'il a trouvé que le programme serveur est mort, vous pouvez alors:
Maintenant, dans le client dans le système A, commencer le processus de
socket
,connect
,send
,recv
, etc nouveau.Essentiellement, vous êtes la création d'un autre serveur X, qui s'occupe de votre serveur actuel, Y. Lorsque le serveur Y meurt, vous regardez vers le serveur X pour des raisons.
OriginalL'auteur Anish Ramaswamy
Vous connecter au nouveau serveur de la même manière vous vous êtes connecté sur le serveur d'origine. Il n'y a pas une autre API pour cela. Je ne vois pas pourquoi vous pensez le contraire..
OriginalL'auteur user207421
Vous ne pouvez pas gérer ce serveur, mais vous pouvez créer une session pour vos clients lors de votre reconnexion d'un client de restaurer leurs paramètres et continuer sur l'envoi et la réception de messages et de votre côté client demande de créer un thread avec un intervalle de temps spécifique pour vérifier si le serveur est disponible ou non et si oui, essayez une reconnexion de la procédure, mais, je vous suggère de vérifier de votre côté serveur programme de ce qui se passe que votre programme?
OriginalL'auteur saeed