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

Entrée/Sortie Java Discussion :

Problème de QoS avec socket ssl java


Sujet :

Entrée/Sortie Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Problème de QoS avec socket ssl java
    Bonjour à tous, je développe une appli de messagerie instantannée via java et ses socket ssl.

    Le principe en quelques mots: le serveur écoute sur un port, l'utilisateur se connecte au serveur via la socket ssl, pas de problème de certificat, par contre quand j'envoie des messages j'ai un a peu près 25% de messages qui sont perdus et qui n'arrivent jamais
    Si les messages n'arrivaient jamais je pourais chercher l'erreur mais là seulement quelqu'un sont perdus...

    Pourtant la connection est bien en TCP ( connecté, aquitement ...) alors je comprend pas, j'ai même essayé avec setPerformancePreferences pour les options réseaux, mais rien y fait.

    Une idée serait plus que bienvenu

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Bah sans code, difficile de te donner des idées....

    Essaie de poster une version simplifiée de ce que tu as actuellement


  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Le programme client et le serveur sont doivent faire à eux deux au moins 3000 lignes de codes, le projet est pas mal avancé mais lors d'une phase de test, je me suis rendu compte du problème.

    Enfin tout ça pour dire que je me voit mal faire une version simplifié de 3000 lignes de codes...

    Je vais expliquer le principe et dites moi si vous trouvez quelques chose de bizarre.

    Le Client n'a aucun port d'ouvert et se connecte directement sur le Serveur (en écoute).
    Une fois connecté le Serveur multithreadé génère une autre instance d'écoute tout en gardant la précédente socket en mémoire.
    Les deux applications échange des messages via un protocole orienté XML qui ressemble à Jabber (juste pour l'aspect du message).
    Le problème c'est que des fois certains messages n'arrivent pas, apparement il vont jusqu'au serveur mais lui ne ferait pas le relais.
    Donc je cherchais à priori une fonction pour gérer les options de la socket (TTL, vérifié que la socket est toujours ouvert, afficher les accusés TCP, ou autre qui pourait m'aider)

  4. #4
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Dans le principe, c'est correct, je dirais même que c'est le principe de fonctionnement de 90% des systèmes clients-serveurs (sauf pour la forme xml des données que tu envoies, mais ça c'est un détail).... Donc ça ne t'avance pas plus que ça et moi non plus... Sans code on est les deux marrons...

    Je ne te demande pas d'envoyer tout le code des interface graphiques & tout le toutim...

    Envoie juste le code de connexion, les boucles de lecture et le code d'écriture...

    Ce que je veux surtout, c'est voir la manière dont tu ouvres et ferme les sockets, ainsi que le mode de transfert des données.... En moins de 100 lignes tu dois pouvoir montrer le principe global (je me moque éperduement du code qui décode et traite les données reçues)

    Sinon, essaie de mettre des System.out.println dans tous les coins pour tracer l'exécution...

    En tout cas, je ne connais rien permettant d'afficher les infos que tu as réclamé (TTL, accusés TCP, ...)

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Déjà je te remercie Pill_s de bien vouloir m'aider

    Donc après quelques bidouilles au niveau de mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PrintWriter PW= new PrintWriter(new BufferedWriter(new OutputStreamWriter(liste_socket_user[i].getOutputStream(),"UTF8")),true);
    PW.println(message);           
    //PW.flush();
    je me suis rendu compte qu'en elevant le flush() de mon printWriter je n'avais plus le problème de messages qui n'arrivent pas.

    Si quelqu'un trouve une logique à ça, qu'il m'éclaire un peu car je croyais justement que le flush était là pour forcer l'envoie et bien vider les flux de communication.

    EDIT: Donc en fait ça réduirai juste le pourcentage de message perdu mais c'est tout, quand j'envoie une grosse série de message de A vers B, les messages que je tente d'envoyer après de B vers A sont perdus...

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Auto-résolution:

    Alors en fait le problème de certains messages qui arrivent et pas d'autre, était lié au nombre de thread qui gonflait à chaque message envoyé.

    Pensant que le GC ferait le ménage je créait un nouveau thread à chaque fois qu 'on envoie un message , et après un certain moment, plantage, donc voilà la réponse à tout ça : trop de thread tue le programme .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Problème d'envoie avec Socket TCP
    Par LKThree dans le forum C#
    Réponses: 0
    Dernier message: 10/05/2013, 11h44
  2. Socket SSL Java
    Par Fabien.31 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 06/05/2013, 00h44
  3. pb de récupérer un objet avec socket en java
    Par rhifay dans le forum Linux
    Réponses: 0
    Dernier message: 19/07/2008, 12h56
  4. Problème de jar avec l'API Java d'open Office (com.sun.star)
    Par mazizou dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 27/05/2008, 17h13
  5. Problême de Socket avec un applet java (RMI/policy)
    Par Vesperal dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 12/04/2006, 13h00

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