Besoin d'aide sur une application Client/Serveur
Résolu/Fermé
A voir également:
- Besoin d'aide sur une application Client/Serveur
- Orange service client - Guide
- Formate pour taxer client sur nourriture - Forum Loisirs / Divertissements
- Désinstaller une application sur pc - Guide
- Formate pour taxer client connexion ✓ - Forum Matériel & Système
- Formate pour taxer client 500€ ✓ - Forum Consommation & Internet
1 réponse
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
3 déc. 2017 à 19:45
3 déc. 2017 à 19:45
Bonjour,
Le problème c'est que le port doit être ouvert côté serveur avant que le client n'essaie de se connecter dessus.
Or ici au moment où ton client devient serveur et où ton serveur devient client il y a un conflit, notamment parce que le serveur n'a pas fermé sa première connexion.
Le mieux serait d'utiliser deux ports, un dédié à chaque programme qu'ils démarreront en tant que serveur.
Remarque : du coup ça n'a plus trop de sens que le premier programme s'appelle Serveur et le deuxième Client, car en fait ils ont tous le double rôle.
Le problème c'est que le port doit être ouvert côté serveur avant que le client n'essaie de se connecter dessus.
Or ici au moment où ton client devient serveur et où ton serveur devient client il y a un conflit, notamment parce que le serveur n'a pas fermé sa première connexion.
Le mieux serait d'utiliser deux ports, un dédié à chaque programme qu'ils démarreront en tant que serveur.
Remarque : du coup ça n'a plus trop de sens que le premier programme s'appelle Serveur et le deuxième Client, car en fait ils ont tous le double rôle.
3 déc. 2017 à 21:23
Du coup j'ai utilisé la méthode de la classe ServerSocket dans le programme client alors qu'elle était pour moi strictement réservée au programme serveur.
Il n'empêche que je ne saisi pas pourquoi je devais aussi utiliser un autre numéro de port (pour le deuxième message) en essayant de fermer la première connexion par la méthode socket.close() glissé, bien entendu, au dessus de la partie du programme où je crée la réponse.
La connexion ne se ferme que lorsque le programme entier a fini de s'exécuter ?
Si jamais quelqu'un a une idée !
Modifié le 3 déc. 2017 à 22:57
La connexion se ferme quand tu le demandes côté "serveur", cependant le "client" ne peut pas savoir à quel moment cela se produit et donc quand il peut réutiliser le port, c'est pour ça qu'il vaut mieux utiliser un deuxième port, dont le "client" sera sûr qu'il est disponible à tout moment puisqu'il est le seul à l'utiliser, la connexion du "serveur" peut donc être fermée n'importe quand, ça n'empêchera pas le "client" de fonctionner.
Remarque : dans un cas d'usage plus complexe, où tu échangerais plusieurs messages de l'un vers l'autre, c'est clairement la solution à deux ports qui fonctionne le mieux, parce que ça te permet de garder les deux connexions ouvertes en même temps (full-duplex) et d'échanger autant de messages que tu veux dans un sens ou dans l'autre sans avoir à ouvrir et fermer des connexions à chaque fois (half-duplex).
Exemple :
3 déc. 2017 à 22:25
En tout cas merci beaucoup pour ton code, ça va me servir pour approfondir le sujet