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 :

socket under Java


Sujet :

Entrée/Sortie Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 18
    Points : 18
    Points
    18
    Par défaut socket under Java
    Bonjour ,
    j'ai reussi a developper une application qui envois des command via socket au serveur ,le probleme est le temp delai d'attente pour recevoir une reponse est tres lente (6 seconds) , mais si j'execute le programme pas a pas (Debug) , je recois la reponse immediatement ...
    Voila le code :

    try
    {
    out.write(request);
    out.flush();


    String output = "";



    while (isProcessing)
    {
    try
    {





    output = in.readLine();


    response += output + "\n";

    ...
    ...

    merci de m'aider

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Déjà il faut éviter la concaténation de String dans une boucle, et utiliser à la place un StringBuilder...

    Pour le reste il faudrait en savoir plus.
    Qu'est ce qui est transmis, quelle est la condition d'arrêt, ...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 18
    Points : 18
    Points
    18
    Par défaut socket under Java
    Bonsoir,
    merci beaucoup pour votre reponse .
    J'ai utiliser StringBuilder , et j'ai eu le meme probleme .

    ....

    output = in.readLine();
    builder.append(output).append("\n");
    ....

    je suis entrain d'envoyer une requette XMLRPC ou du XML ...


    la Reponse de la requette est :




    HTTP/1.1 200 OK
    Date: Fri, 14 Dec 2018 21:40:27 GMT
    X-Powered-By: .....
    Date: Fri, 14 Dec 2018 21:40:27 GMT
    Server: ......
    Set-Cookie: JSESSIONID=1c189k5ghouts10oq71cb0rfu0;Path=/
    Expires: Thu, 01 Jan 1970 00:00:00 GMT
    Content-Type: text/xml
    Content-Length: 265

    --------------------------------------------------------------------------------> il y'a un vide , a ce point ca bloque ICI pendant 10 Second . ici je recois null du serveur si comme si le client attend une reponse avec un size > 0 <-----------------------------------------------------------


    <?xml version="1.0" encoding="UTF-8"?><methodResponse><params><param><value><struct><member><name>responseCode</name><value><i4>0</i4></value></member><member><name>taskId</name><value><i4>727</i4></value></member></struct></value></param></params></methodResponse>



    et la boucle est false si je recois null ou "<?xml version="1.0"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
                if (output == null || output.startsWith ("<?xml version")) {
                                              isResponseOk = true;
                                                isProcessing = false;
                                                break;
    PS : Mon ami utilise HttpClient et ca marche tres bien , moi j'utilise socket toujours j'ai un delai de reponse de plus de 6 seconde

    Merci

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    C'est du HTTP donc.
    Il est préférable d'utiliser un outil qui respectent le protocole HTTP, comme HttpClient ou simplement via les classes standards URL/URLConnection.

    Ou alors il faudra se plonger dans la société et la RFC afin de respecter le protocole...

    Je ne sais pas ce qui bloque, mais je soupçonne un deadlock avec le serveur : tu attends qu'il fermé le flux, et lui attend une autre demande...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 18
    Points : 18
    Points
    18
    Par défaut socket under Java
    Bonjour ,

    Merci beaucoup pour votre aide .

    Vous avez raison la meilleur solution est d'utiliser HttpClient , mais comme je suis de l'ancienne ecole , j'aime bien relever les defaits


    root cause :

    A un certain moment , le serveur envois une reponse NULL, et comme j'utilise readln ( je lis la reponse ligne par ligne) , DONC le client hang car la taille de la reponse est 0 .

    J'ai regler le probleme en utilisons read (caractere par caractere ) au lieu de readln ( ligne par ligne) .



    encore je vous remercie pour votre aide & je vais marquer ce post comme resolu .


    PS : maintenent je vais ouvrir un autre post comment rechercher une valeur specifique dans une reponse XML

    Merci

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

Discussions similaires

  1. objet sockets sous java
    Par karmi dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 20/09/2007, 09h55
  2. Probleme de sockets en java
    Par nblx2k4 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 09/08/2007, 00h42
  3. Problème de QoS avec socket ssl java
    Par aaratorn dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 19/07/2007, 14h55
  4. Réponses: 1
    Dernier message: 20/02/2007, 18h47

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