IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Réseau - sockets


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Par défaut Réseau - sockets
    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.

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    Bonjour

    1ère erreur selon moi... Ce n'est pas au serveur de ce connecté au client mais au client de se connecter au serveur. Ca, c'est plutot "immuable" dans ce genre d'architecture.

    LE serveur écoute sur un port, et ce sont les clients qui viennent si connecter.
    Ensuite, pour l'aspect multithread, tu peux trouver pleins d'exemples sur le net.

    Ensuite, en dehors des sockets, tu pourrais aussi regarder du coté du Remoting ou de Corba (IIOP.Net) qui permette également de faire des choses interessantes.

    Et à defaut des sockets, tu peux aussi te pencher sur les classes TCPListener, TCPClient

    The Monz, Toulouse

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Par défaut
    Bonjour theMonz31,

    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

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    rien n'empeche un client d'etre aussi serveur

    Cela dit, je ferais un TCPListener dans BROL... avec un compteur de nombre
    de connexion, et dès que j'en ai une de validé, je refuse toutes les autres demandes de connexion...

    Après, les deux peuvent parler ensemble

    ET du coté BIG_BROTHER, j'implémenterais "plusieurs" Thread contenant un TCPClient...

    Après, faut gérer une liste de BROL pour que BB soit capable de créer tous les thread qui conviennent

    Voila comment je verrais la chose

    Bref, en moins d'une journée, ca doit être plié

    The Monz, Toulouse

  5. #5
    Membre confirmé
    Profil pro
    Développeur
    Inscrit en
    Avril 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2007
    Messages : 52
    Par défaut
    Juste à titre d'information, j'aurais aimé savoir pourquoi tu conseilles d'utiliser les classes TCPxxx ou Remoting plutôt que les Sockets ? Quels sont leurs avantages ?

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    je trouve la communication avec TCPClient et TCPListener plus simple à réaliser qu'avec les sockets... qui sont un peu plus souple puisqu'on peut faire de l'UDP ou du TCP

    Cela dit, ce sont des classes qui surcouchent les sockets , donc, ya rien non plus d'exceptionnel dedans

    sinon, un article par rapport à ce qu'il veut faire le gars

    TCP threaded server

    ou celui la :

    Chat Server in C#

    The Monz, Toulouse

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/08/2007, 10h47
  2. [Réseau] [socket] create + bind + file descriptor
    Par Dark Raph dans le forum C++
    Réponses: 6
    Dernier message: 26/07/2007, 10h52
  3. [Réseau] socket trop lent
    Par cid7777 dans le forum C++
    Réponses: 5
    Dernier message: 12/07/2007, 00h30
  4. [Réseau] Socket - choisir son interface réseau
    Par Invité(e) dans le forum Réseau
    Réponses: 2
    Dernier message: 28/02/2007, 11h06
  5. Programmation réseau : socket et thread
    Par roms712 dans le forum POSIX
    Réponses: 12
    Dernier message: 12/01/2007, 17h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo