Appli client serveur particulière

Résolu
tlibert
Messages postés
2
Date d'inscription
mardi 31 août 2004
Statut
Membre
Dernière intervention
15 octobre 2008
- 15 oct. 2008 à 09:07
gglamicose
Messages postés
94
Date d'inscription
lundi 7 juillet 2008
Statut
Membre
Dernière intervention
7 mars 2009
- 16 oct. 2008 à 10:20
Bonjour à tous,

Je suis à la recherche de conseils et d'aide pour le développement d'une petite application en c#.
Voici une rapide description :
L'appli se compose en fait de deux éléments : un serveur (winform ou service) et un client (service).
Le principe est le suivant (très simple) : Le client se lance et se met en mode écoute sur un port déterminé via un(e) socket.
Le serveur se connecte au client, un dialogue basique commence du style :
Serveur : bonjour
Client : bonjour, bye

Vraiment très basique...
Ensuite le serveur ferme la communication avec le client lors de la réception du "bonjour, bye" et le client se remet en mode écoute.

Pour l'instant, j'arrive bien à faire communiquer les deux, mais j'ai toujours un plantage lorsque je ferme le client ou le serveur.

Question : c'est le serveur ou le client qui doit fermer la communication ?
Quelqu'un a-t'il un tuyau ?

Information importante : je travaille en mode "asynchrone" pour les sockets.

Dernière chose : j'aimerais que mon serveur soit multi-thread pour pouvoir communiquer avec plusieurs clients simultanément. Petite précision : les clients ne communiquent pas entre eux, c'est toujours un dialogue serveur vers client.

Merci beaucoup de votre aide et de vos conseils !

Si nécessaire, je peux publier le code.

<!-- / message -->

3 réponses

gglamicose
Messages postés
94
Date d'inscription
lundi 7 juillet 2008
Statut
Membre
Dernière intervention
7 mars 2009
1
15 oct. 2008 à 09:55
Salut tlibert !
Je ne suis pas une bête de réseau, mais si tu coupes le serveur, le client se met en mode d'écoute de qui de quoi ? J'ai toujours pensé que c'était le serveur qui pouvait ainsi se mettre en attente de connexion... (Mais si tu es sur de toi, merci de m'éclairer ) !
De plus, je crois aussi que lors d'une fermeture de connexion, tu doit dire a tout tes socket de fermer leur communication (socket client ET socket serveur). J'ai eu pas mal d'erreurs la dessus, car l'un des deux (client ou serveur) attendait quelque chose qui ne viendra jamais...
Voila, en espérant ne pas avoir dit trop de bêtises et t'avoir aidé
3
tlibert
Messages postés
2
Date d'inscription
mardi 31 août 2004
Statut
Membre
Dernière intervention
15 octobre 2008

15 oct. 2008 à 15:03
Bonjour gglamicose,


Merci pour ta réponse. Je vais peut-être reformuler un descriptif de mon appli.


Partie A:
Un service (appelons-le BROL) est installé sur des ordinateurs.
Une fois que le pc démarre, BROL démarre aussi et se met en attente de connection.


Partie B :
Une appli winform ou un service (appelons-le BIG_BROTHER) est installé sur un ordinateur central (ou serveur).
Une fois l'appli lancée, BIG_BROTHER va se connecter à un BROL et commencer une simple discussion.
BROL répond "ok, bye", BIG_BROTHER ferme la connection avec BROL.
BROL se remet en mode écoute.
BIG_BROTHER se connecte à un autre BROL et ainsi de suite.


Dans un schéma classique, un serveur se met en attente de connection de clients. Plusieurs clients se connectent alors à un et un seul serveur et le dialogue client-serveur à lieu.


Mon appli est plutôt : BROL (le serveur) se met en attente et n'accepte qu'une seule connection d'un BIG_BROTHER (le client) et ce même client peut se connecter à plusieurs serveurs en même temps.


Est-ce plus clair ?
Comment vois-tu la chose ?


Merci
0
gglamicose
Messages postés
94
Date d'inscription
lundi 7 juillet 2008
Statut
Membre
Dernière intervention
7 mars 2009
1
16 oct. 2008 à 10:20
Attention tlibert, tu ne devrai pas valider ma réponse car elle ne résout pas ton problème, ça pourrait empêcher d'autres personnes de t'aider !!

Pour ce qui est de ton problème, je ne peut t'apporter qu'une idée personnelle, peut être loin de ce qui est faisable ou pas, bref, cette idée vaut ce qu'elle vaut ne connaissant pas les contraintes exactes de ton projet  !
 Pourquoi ton serveur "Big Brother" hébergerai un client ? Comment peut - il savoir qu'un serveur vient de se connecter ? Vas-t-il devoir passer en revue la liste de tous les clients BROL potentiellement activable ? En clair, je ne pense pas que ce soit la meilleure manière de procéder d'un point de vue "logique".
Ce que je ferais à ta place: Big Brother héberge un serveur, en attente de connections client. Chaque PC a lui un client du service BROL. Au démarrage, le client va se connecter au serveur, la tu fais ton opération, et à la fin BROL (ou Big Brother, tout dépend de ce que tu veut faire) va écrire dans un fichier de Log qu'il a discuté avec ce serveur, et donc tenter une connection avec un autre si il a besoin de faire d'autres opérations. Grace a ce fichier de log, BROL vas chercher a discuter avec tous les serveur un par un (si c'est bien cela qu'il doit faire... ).

Encore une fois je tiens à te préciser que mes connaissances en matière de réseau sont limitées, et que je ne n'ai qu'une vue partielle de ton projet...
Cela dit bonne chance, en espérant t'avoir aidé !
0