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

Codes sources à télécharger Java Discussion :

Serveur TCP multithread


Sujet :

Codes sources à télécharger Java

  1. #1
    Membre averti
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Points : 444
    Points
    444
    Par défaut Serveur TCP multithread
    Bonjour,

    Je vous propose un nouvel élément à utiliser : Serveur TCP multithread

    le fichier compressé contient deux classes, ServeurTCP joue le rôle du serveur et ClientTCP c'est le client.

    le serveur peut communiquer avec plusieurs clients simultanément, si le client veut quitter la conversation il suffit qu'il envoie une chaine vide.

    Qu'en pensez-vous ?
    C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Mal conçu, et une mauvaise base pour les débutants.

    Il y a un Thread.sleep qui traine dans le serveur, pourquoi il est là?
    Chaque ligne crée une nouvelle connexion au serveur, pourquoi ne pas les réutiliser? Les connexions ne sont jamais cloturées, ni du coté serveur, ni du coté client. Pourquoi garder autant de connexions actives? Vous allez saturer votre OS rapidement.

    Enfin, vous oubliez de préciser l'encodage de vos Reader / Writer, vous allez avoir des problèmes quand vous travaillerez avec des OS différents pour le client et le serveur.

  3. #3
    Membre averti
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Points : 444
    Points
    444
    Par défaut
    Il y a un Thread.sleep qui traine dans le serveur, pourquoi il est là?
    C'est juste pour mettre le thread actuel en pause entre deux traitements, comme il y a plusieurs threads qui s'exécutent simultanément, j'ai préféré mettre en attente un thread afin qu'un autre puisse s'exécuter.

    Chaque ligne crée une nouvelle connexion au serveur, pourquoi ne pas les réutiliser?
    vous avez raison, comment peut-on les réutiliser ?

    Les connexions ne sont jamais cloturées, ni du coté serveur, ni du coté client.
    Si le client envoie une chaine vide je ferme la connexion de deux coté en utilisant la méthode close.

    Enfin, vous oubliez de préciser l'encodage de vos Reader / Writer, vous allez avoir des problèmes quand vous travaillerez avec des OS différents pour le client et le serveur.
    Ok, je dois faire ceci par exemple ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new InputStreamReader(client.getInputStream(), "UTF-8")
    C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Snack3r Voir le message
    C'est juste pour mettre le thread actuel en pause entre deux traitements, comme il y a plusieurs threads qui s'exécutent simultanément, j'ai préféré mettre en attente un thread afin qu'un autre puisse s'exécuter.
    Le thread n'effectue qu'un seul traitement. Tout ce que tu fais c'est attendre une seconde après le début de la connexion avant de répondre au client.


    Citation Envoyé par Snack3r Voir le message
    vous avez raison, comment peut-on les réutiliser ?
    Faire sortir la connexion de la boucle dans le client, faire une boucle coté serveur.
    Citation Envoyé par Snack3r Voir le message
    Si le client envoie une chaine vide je ferme la connexion de deux coté en utilisant la méthode close.
    Oui, et toutes les autres connexions que tu as établis?


    Citation Envoyé par Snack3r Voir le message
    Ok, je dois faire ceci par exemple ?
    Par exemple.

  5. #5
    Membre averti
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Points : 444
    Points
    444
    Par défaut
    Faire sortir la connexion de la boucle dans le client, faire une boucle coté serveur.
    désolé, j'ai pas bien saisi ce que vous avez dit.
    du coté client, je dois faire sortir cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    client = new Socket("localhost", 7900);
    de la boucle while ?
    et pour le serveur, j'ai déjà une boucle while !

    Oui, et toutes les autres connexions que tu as établis?
    C'est vrai, je les laisser ouvertes, heureusement, le garbage collector va s'en occuper mais j’avoue quand même que c'est une mauvaise gestion de mémoire.
    C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie.

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Snack3r Voir le message
    désolé, j'ai pas bien saisi ce que vous avez dit.
    du coté client, je dois faire sortir cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    client = new Socket("localhost", 7900);
    de la boucle while ?
    Ben oui, t'as pas besoin de faire une nouvelle connexion pour chaque ligne

    Citation Envoyé par Snack3r Voir le message
    et pour le serveur, j'ai déjà une boucle while !
    Uniquement sur le accept(). Il te faut aussi une boucle par client, pour traiter chaque ligne envoyée. Tu a N clients, qui doivent envoyer M message => Il te faut deux boucles dans le serveur. Parce que, en l'état de ton serveur, le threading ne sert même à rien vu le peu de travaile que tu fait sur chaque connexion.

    Citation Envoyé par Snack3r Voir le message
    C'est vrai, je les laisser ouvertes, heureusement, le garbage collector va s'en occuper mais j’avoue quand même que c'est une mauvaise gestion de mémoire.
    Avant que ça ne commencer à faire bouger le GC, tu aura surtout bouffé toutes les sockets disponibles dans l'OS

  7. #7
    Membre averti
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Points : 444
    Points
    444
    Par défaut
    C'est compris. Merci beaucoup pour vos remarques pertinentes.
    C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie.

Discussions similaires

  1. serveur tcp multithread jeux
    Par midotek dans le forum Réseau
    Réponses: 1
    Dernier message: 01/12/2008, 23h43
  2. Aide pour serveur TCP multithread
    Par kingkong dans le forum Réseau
    Réponses: 3
    Dernier message: 27/04/2006, 13h37
  3. client/serveur tcp/ip en c sous unix
    Par oclone dans le forum Développement
    Réponses: 8
    Dernier message: 19/04/2005, 19h55
  4. Serveur TCP/IP Indy bloquant ?
    Par f6dqm1 dans le forum Web & réseau
    Réponses: 6
    Dernier message: 07/12/2004, 10h08
  5. [Concept]Concept d'un serveur TCP/IP
    Par Zc dans le forum Développement
    Réponses: 8
    Dernier message: 17/01/2003, 18h06

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