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

  1. #21
    Candidat au Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    septembre 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : septembre 2017
    Messages : 15
    Points : 3
    Points
    3

    Par défaut

    Citation Envoyé par thelvin Voir le message
    Je l'ai déjà fait, tu ne peux pas convertir un InputStream en byte array, cela force à attendre le timeout, donc performances exécrables.

    Tu dois lire le flux au fur et à mesure, pas en une fois. C'est comme ça tu sais, tu n'y couperas pas.

    Tu dis que tu n'y arrives pas mais tu ne montres pas le code quand on te le demande. Tu ne peux pas être si pressé que ça si tu fais volontairement durer.

    Bonjour

    Pourtant si j'ai copié mon code à plusieurs reprises notamment dans ma dernière réponse y a tout le code ou j'effectue le traitement de:

    - la requête du client Web
    - l'envoi vers le serveur Web
    - traitement de la reponse
    - envoi vers client Web.


    Le revoici...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    import org.apache.commons.io.IOUtils;
    import java.io.*;
    import java.net.*;
    import java.lang.*;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Arrays;
    import java.util.*;
     
    /**Ceci est le coeur de notre programme. Cette classe permet le traitement de la
     * requete du client, l'envoi vers le serveur Web, le traitement de la reponse,
     * et l'envoi de cette derniere vers le client.
     *
     * Cette classe est diviee en quatre methode dont trois principales:
     *
     * <pre>
     *    - La methode run(), dans laquelle chaque thread sera traite;
     *    - La methode Traitement() utilisee pour le traitement de la requete venant du client;
     *    - La methode TraitementReponse() analyse la réponse du serveur et format la réponse pour le client;
     *    - La methode UpdateDispo() qui s'occupe quant a elle d'analyser la réponse HEAD pour la validité du cache.
     * </pre>
     * @author  Herve Jacquemin et Arnaud Vaneukem
     * @version 1.0
     * @since   2017-12-03
     */
     
    public class ProxyThreads implements Runnable {
     
        private Socket client = new Socket();
     
        /** Constructeur de la classe ProxyThreads().
         * On reçoit le socket en argument et on s'occupe de creer
         * le thread qui sera associe au socket.
         *
         * @param client reception du socket client
         */
        public ProxyThreads(Socket client) {
            this.client = client;
        }
     
        private BufferedReader requeteBrute = null;
        private TraitementRequete requeteClient = null;
        private DataOutputStream versServeur = null;
        private BufferedReader headReponse = null;
       //private DataOutputStream requeteVersServeur = null;
        private SimpleDateFormat dateFormatter = null;
        private Date dateFromCache = null;
        private Date dateUpdated = null;
        /** Création du stream d'entrée venant du serveur web*/
        private Socket serveur = null;
        private InputStream reponseServeur = null;
     
        private byte[] bytesReponse = null;
        private byte[] reponseTraitee = null;
     
        private BufferedOutputStream versClient = null;
        private String dateUpdate = null;
     
     
        public void run() {
     
     
            try {
                /** Création d'un objet de type BufferedReader nommé requeteClient.
                 *
                 * Le getter de la classe Socket est appelé pour la variable "client" (type Socket) et le contenu est
                 * passé en argument au constructeur de la classe "InputStreamReader".
                 * https://docs.oracle.com/javase/8/docs/api/java/net/Socket.html#getInputStream--
                 *
                 * "new InputStreamReader(client.getInputStream() appelle implicitement la méthode ToString de la classe "InputStreamReader".
                 *
                 * Le contenu de ce ToString est passé en argument au constructeur de la classe "BufferedReader".
                 */
     
                requeteBrute = new BufferedReader(new InputStreamReader(client.getInputStream()));
                requeteClient = Traitement(requeteBrute);
     
            } catch (IOException e) {
                System.out.println("Erreur lors de la lecture de la requête du client: " + e);
                return;
            }
            TraitementRequete reponseFromCache = null;
            reponseFromCache = ProxyServeur.ReadFromCache(requeteClient.getUri());
     
            if(reponseFromCache != null){
     
                try{
                    serveur = new Socket(InetAddress.getByName(requeteClient.getHost()), requeteClient.getPort());
                    versServeur = new DataOutputStream(serveur.getOutputStream());
     
                /** Ajout de la requete customisée, créer dans la classe "ClientHandling" au flux de sortie.
                 * La requete est envoyer sous forme de String et convertie en Bytes via la méthode writeBytes().
                 * On force l'écriture du buffer dans le stream via l'appel de la méthode flush().
                 * Fermeture du tampon et libaration des ressources associées via la méthode close().
                 */
                    versServeur.flush       ();
                    versServeur.writeBytes(requeteClient.HeadString());
                    versServeur.flush();
     
     
                    headReponse = new BufferedReader(new InputStreamReader(serveur.getInputStream()));
     
                    dateUpdate = UpdateDispo(headReponse);
                    dateFormatter = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z",Locale.US);
     
                    try {
                        dateUpdated = dateFormatter.parse(dateUpdate);
                        dateFromCache = dateFormatter.parse(reponseFromCache.getDateModified());
                    }catch(java.text.ParseException e){
                        System.out.println(e);
                    }
     
                    if(dateFromCache.equals(dateUpdated) || reponseFromCache.getDateModified() == null){
                        System.out.println("les dates sont égales");
                        versClient = new BufferedOutputStream(client.getOutputStream());
                        versClient.write(reponseFromCache.getReponse());
     
                        versClient.flush();
                        versClient.close();
                        client.close();
                        serveur.close();
                    }
                    else{
                        ProxyServeur.DeleteFromCache(requeteClient.getUri());
                    }
                }catch(IOException e){
                    System.out.println("Error lors de l'écriture de la réponse au client: " + e);
                }
            }
            else{
                try {
                    /**
                     * Création socket pour la commnication "Proxy --> Server Web".
                     * Création du flux de sortie nécessaire à l'établissement de la connexion.
                     */
                    serveur = new Socket(InetAddress.getByName(requeteClient.getHost()), requeteClient.getPort());
                     versServeur = new DataOutputStream(serveur.getOutputStream());
     
                    /** Ajout de la requete customisée, créer dans la classe "ClientHandling" au flux de sortie.
                     * La requete est envoyer sous forme de String et convertie en Bytes via la méthode writeBytes().
                     * On force l'écriture du buffer dans le stream via l'appel de la méthode flush().
                     * Fermeture du tampon et libaration des ressources associées via la méthode close().
                     */
                    //requeteVersServeur.flush();
                    //requeteVersServeur.writeBytes(requeteClient.toString());
                    //requeteVersServeur.flush();
                    //versServeur.flush();
                    versServeur.writeBytes(requeteClient.toString());
                    versServeur.flush();
     
                } catch (UnknownHostException e) {
                    System.out.println("Unknown host: " + requeteClient.getHost());
                    System.out.print(e);
                    return;
                } catch (IOException e) {
                    System.out.println("Erreur lors de l'écriture de la requête: " + e);
                    return;
                }
     
                try{
                    reponseServeur = serveur.getInputStream();
                    reponseTraitee = TraitementReponse(reponseServeur);
                    requeteClient.setReponse(reponseTraitee);
                }
                catch (IOException e){
                    System.out.println("Error lors de la lecture de la réponse du serveur: " + e);
                }
     
     
                try{
     
                    ProxyServeur.AddToCache(requeteClient);
                    //versClient.flush();
                    versClient = new BufferedOutputStream(client.getOutputStream());
                    versClient.write(requeteClient.getReponse());
     
                    versClient.flush();
                    versClient.close();
     
     
                    client.close();
                    serveur.close();
                    /**Objet en cache*/
                    /**}
                     else{
                     BufferedOutputStream versClient = new BufferedOutputStream(client.getOutputStream());
                     versClient.write(cache);
                     versClient.flush();
                     versClient.close();
     
     
                     client.close();
                     serveur.close();
                     }*/
     
                }catch (IOException e){
                    System.out.println("Error lors de l'écriture de la réponse au client: " + e);
                }
            }
        }
     
     
        public TraitementRequete Traitement(BufferedReader requeteBrute) {
            /** Création de la variable de retour chariot et le port http par defaut pour les requêtes vers les serveurs web */
            final String CRLF = "\r\n";
            final int PortDefaut = 80;
     
            /** Création des variables, issue de la requêtes HTML, utilisées pour appeler le constructeur de la classe ClientHandling*/
            String method = "";
            String uri = "";
            String version = "";
            String headers = "";
            String host = "";
            int port = 0;
     
            /** Création de la variable qui recevra la 1ière ligne de la requête client*/
            String firstLine = "";
     
            try {
                /** Récupération de la 1ière ligne de la requête */
                firstLine = requeteBrute.readLine();
            } catch (IOException e) {
                /** Erreur générée si la requête ne peut être lue */
                System.out.println("Erreur lors de la lecture de la requete: " + e);
            }
     
            /** Création d'une variable temporaire "tmp" qui reçoit les différentes information de la première ligne de la requête*/
     
            String[] tmp = firstLine.split(" ");
            method = tmp[0];
            uri = tmp[1];
            version = tmp[2];
     
            /** Test afin de déterminer si la requête est bien un "Get";
             * Si pas, une erreur est affichée en console
             * */
     
            if (method.equals("GET")) {
     
                /** second test afin de déterminer si la version est bien de type HTTP/1.0 ou HTTP/1.1
                 * Si pas, une erreur est affichée en console.
                 * */
     
                if (version.equals("HTTP/1.0") || version.equals("HTTP/1.1")) {
                    //System.out.println("OK version = " + version);
                    try {
     
                        /** Après avoir récupérer le stream entrant, on tente de le lire pour récupérer le Header, le formater pour l'utiliser par la suite.
                         * La variable "line"(String) reçoit la première ligne contenue dans l'objet "from" reçu en argument dans le constructeur.
                         * Chaque ligne est ajouter à la variable "headers" et une fin de ligne (CRLF) est ajoutée en fin de ligne.
                         * On reproduit la boucle jusqu'à ce qu'il n'y ait plus de ligne dans la variable "from".
                         *
                         * Le reste effectue quelques opération afin de formater le pquet au mieux pour avoir un résultat similaire à:
                         *
                         * Host: www.perdu.com
                         * Proxy-Connection: keep-alive
                         * Cache-Control: max-age=0
                         * User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
                         * Upgrade-Insecure-Requests: 1
                         * Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,* /*;q=0.8   ----> la ligne a été volontairement tronquée par un " " pour éviter le symbole de fin de commentaire.
                         * Accept-Encoding: gzip, deflate
                         * Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
                         *
                         */
                        String ligne = requeteBrute.readLine();
                        //headers += ligne + CRLF;
     
                        while (ligne.length() != 0) {
                            // ligne = requeteBrute.readLine();
     
                            // System.out.println("headers = " + headers);
                            if (ligne.startsWith("Host:")) {
                                tmp = ligne.split(" ");
                                if (tmp[1].indexOf(':') > 0) {
                                    String[] tmp2 = tmp[1].split(":");
                                    host = tmp2[0];
                                    port = Integer.parseInt(tmp2[1]);
                                } else {
                                    host = tmp[1];
                                    port = PortDefaut;
                                }
                            }
                            if (ligne.startsWith("Accept-Encoding:")||
                                    ligne.startsWith("Accept-encoding:")){
                               headers += "Accept-Encoding: gzip" + CRLF;
                            }
                            else{
                                headers += ligne + CRLF;
                            }
                            ligne = requeteBrute.readLine();
                        }
                    } catch (IOException e) {
                        System.out.println("Erreur de lecture du socket: " + e);
                    }
                    //System.out.println("L'hôte à contacter est " + host + " sur le port " + port);
                } else {
                    try{
                        System.out.println("Version " + version + " n'est pas supportée.");
                        client.close();
                    }catch(IOException e){
                        System.out.println("Error lors de la fermeture du socket client: " + e);
                    }
     
                }
            } else {
                try{
                    client.close();
                    System.out.println("Seules les requêtes \"GET\" sont supportées.");
                }catch(IOException e){
                    System.out.println("Error lors de la fermeture du socket client: " + e);
                }
            }
     
            TraitementRequete requeteTraitee = new TraitementRequete(method, uri, version, headers, host, port);
            return requeteTraitee;
        }
     
     
        public byte[]  TraitementReponse(InputStream reponseServeur ) {
     
            final String CRLF = "\r\n";
     
            final int buffer = 33554432;
     
            String statusLigne = "";
     
            String headers = "";
            BufferedReader buffedHeader = null;
            BufferedReader buffedChunk = null;
            ByteArrayInputStream byteArrayInputStream = null;
            byte[] byteStream = null;
            byte[] byteHeader = null;
            byte[] tmpTest = new byte[4];
            byte[] tmpTest2 = new byte[2];
            byte[] body = null;
            String finChunk = "\r\r0\r\n";
            byte[] finChunkBytes = finChunk.getBytes();
            int longueur = 0;
            int headerLength = 0;
            int chunkLength = 0;
            int tailleByteChunk = 0;
            byte[] byteChunk = null;
            boolean chunk = false;
            int count = 0;
     
     
     
            String dateModified = "";
            int length = -1;
            boolean obtenirStatusLigne = false;
     
     
            try{
     
                byteStream = IOUtils.toByteArray(reponseServeur);
     
                /**Dans la boucle ci-dessous on va lire chaque ligne de la réponse du serveur web.
                 * Tans que la taille de la ligne est différente de zéro la variable "statusLigne" récupère le contenu de cette ligne.
                 * Si le contenu de cette ligne = 0, on ajoute "\r\n" à la fin pour dire que notre requete est finie.
                 *
                 * Ensuite on test chaque ligne afin de trouvé la taille de la réponse.
                 * On récupère ensuite cette taille dans notre variable "length".
                 */
                longueur = byteStream.length;
                String parser = "\r\n\r\n";
                byte searchVal[] = parser.getBytes();
     
                for(int i = 0; i <= longueur-3;i++){
                    tmpTest[0] = byteStream[i];
                    tmpTest[1] = byteStream[i+1];
                    tmpTest[2] = byteStream[i+2];
                    tmpTest[3] = byteStream[i+3];
                    if (Arrays.equals(searchVal, tmpTest))
                    {
                        headerLength += i;
                        break;
                    }
                }
                headerLength+=4;
                byteHeader = new byte[headerLength];
                System.arraycopy(byteStream, 0, byteHeader, 0, headerLength);
     
                buffedHeader = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(byteHeader)));
     
                //reponseServeurBuff = new BufferedReader(new InputStreamReader(tempBuff));
                String ligne = buffedHeader.readLine();
     
     
                while(ligne.length() !=0){
                    if (!obtenirStatusLigne){
                        statusLigne = ligne;
                        obtenirStatusLigne = true;
                    }
                    else{
                        headers += ligne + CRLF;
                    }
     
                    if(ligne.startsWith("Last-Modified:")||
                            ligne.startsWith("Last-modified:")){
                        String[] tmp1 = ligne.split(": ");
                        dateModified = tmp1[1];
                    }
                    if (ligne.startsWith("Content-Length:") ||
                            ligne.startsWith("Content-length:")){
                        String[] tmp2 = ligne.split(" ");
                        length = Integer.parseInt(tmp2[1]);
                    }
     
                    if (ligne.startsWith("Transfer-Encoding: chunked") ||
                            ligne.startsWith("Transfer-encoding: chunked")){
                        String[] tmp2 = ligne.split(" ");
                        chunk = true;
                    }
     
                    ligne = buffedHeader.readLine();
                }
            }catch(IOException e) {
                System.out.println("Erreur de lecture du headers venant du serveur WEB: " + e);
            }
     
            requeteClient.setDateModified(dateModified);
     
            try{
                if(chunk){
                    String parser = "\r\n";
                    byte searchVal[] = parser.getBytes();;
                    for(int i = headerLength; i <= longueur-3;i++){
                        tmpTest2[0] = byteStream[i];
                        tmpTest2[1] = byteStream[i+1];
                        //tmpTest[2] = byteStream[i+2];
                        //tmpTest[3] = byteStream[i+3];
                        if (Arrays.equals(searchVal, tmpTest2))
                        {
                            chunkLength += i;
                            break;
                        }
                    }
     
                    chunkLength+=2;
                    byteChunk = new byte[chunkLength-headerLength];
                    System.arraycopy(byteStream, headerLength, byteChunk, 0, chunkLength-headerLength);
     
                    buffedChunk = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(byteChunk)));
     
                    //reponseServeurBuff = new BufferedReader(new InputStreamReader(tempBuff));
     
                    tailleByteChunk = Integer.parseInt(buffedChunk.readLine(),16);
     
                    //body = new byte[tailleByteChunk];
                }
            }catch(IOException e) {}
     
     
            int bodyLength = 0;
     
            if(chunk){
                bodyLength = tailleByteChunk;
                headerLength +=chunkLength-headerLength;
            }else{
                bodyLength = length;
            }
     
            body = new byte[bodyLength];
     
                byteArrayInputStream = new ByteArrayInputStream(byteStream,headerLength,byteStream.length);
     
                int bytesLu = 0;
                byte buf[] = new byte[buffer];
                boolean boucle = false;
     
                /**La condition ci-dessous est utilisée dans le cas où il n'y aurait de "Content-length" dans la réponse.
                 * On boucle ensuite dans le while jusqu'à la fermeture de la connexion.
                 */
                if (bodyLength == -1){
                    boucle = true;
                }
     
                /**Lecture du corps de la réponse et on copie le contenu dans la variable body.
                 * On s'arrête quand le nombre de bytesLu = Length ou jusque ce que la connexion se coupe.
                 */
     
                while (bytesLu < bodyLength || boucle){
                    int size = byteArrayInputStream.read(buf,0, buffer);
                    if (size == -1) {
                        break;
                    }
                /**
                 * Copie des bytes dans le body en s'assurant qu'on ne dépasse pas la taille d'objet maximum.
                 */
                for (int i =0;
                     1 < size && (i+ bytesLu) < bodyLength;
                     i++){
     
                    body[bytesLu + i] = buf[i];
                    /** trouver ce qu'il faut faire ici action avec buf[i]*/
                }
                bytesLu += size;
            }
     
            byte[] byteRequete = new byte[byteStream.length];
     
     
            if (chunk){
                System.arraycopy(byteHeader, 0, byteRequete, 0, byteHeader.length);
                System.arraycopy(byteChunk, 0, byteRequete, byteHeader.length,byteChunk.length);
                System.arraycopy(body, 0, byteRequete, byteHeader.length+byteChunk.length, body.length);
                System.arraycopy(finChunkBytes, 0, byteRequete,byteHeader.length+byteChunk.length+body.length,finChunkBytes.length);
     
            }else{
                System.arraycopy(byteHeader, 0, byteRequete, 0, byteHeader.length);
                System.arraycopy(body, 0, byteRequete, byteHeader.length, body.length);
            }
     
     
            return byteRequete;
        }
     
     
     
     
     
        public String UpdateDispo(BufferedReader head) {
     
     
            String timeStampUpdated = null;
     
            try{
     
                String ligne = head.readLine();
     
                while (ligne.length() != 0) {
     
                    if (ligne.startsWith("Last-Modified:") ||
                            ligne.startsWith("Last-modified:")) {
                        String[] tmp1 = ligne.split(": ");
                        timeStampUpdated = tmp1[1];
                        break;
                    }
                    ligne = head.readLine();
                }
     
            }catch(IOException e){
                System.out.println("Erreur lors de l'écriture du paquet HEAD" + e);
            }
     
            return timeStampUpdated;
        }
    }

  2. #22
    Candidat au Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    septembre 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : septembre 2017
    Messages : 15
    Points : 3
    Points
    3

    Par défaut

    Est-ce que coller dans le corps est suffisant ? Je n'arrive pas à envoyer l'archive complète dans une de mes réponses...

  3. #23
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    11 737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 11 737
    Points : 19 925
    Points
    19 925

    Par défaut

    Je ne sais pas pourquoi je n'ai pas été prévenu de ces réponses. Bizarre. Mais peu importe puisque c'est un dialogue de sourd.

    Oui coller le code marche très bien et on voit tout.

    Mais là tu nous montres le même code sans arrêt, celui qui ne marche pas et pour lequel on t'a dit pourquoi il ne marche pas et ce qu'il faut faire à la place.

    Je t'ai dit que tu ne peux pas avoir de IOUtils.toByteArray(), parce que ça ne peut pas marcher. Donc tu dois faire un autre code dans lequel il n'y a pas ça.
    Tu dis que tu n'y arrives pas. Eh ben très bien, montre. C'est ça que tu dois montrer, pas la même chose que depuis le début dont on t'a déjà dit pourquoi ça ne marchera pas.

    Ça devrait être évident.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Java : socket, octects perdus
    Par thebloodyman dans le forum IO
    Réponses: 2
    Dernier message: 03/09/2007, 09h39
  2. [JAVA] Redimension d'image
    Par elanari dans le forum 2D
    Réponses: 10
    Dernier message: 08/03/2007, 23h49
  3. Java et traitement image
    Par martini37 dans le forum 2D
    Réponses: 13
    Dernier message: 14/02/2007, 12h48
  4. Débutant Java, Sockets et observers
    Par nouknouk dans le forum IO
    Réponses: 8
    Dernier message: 19/12/2006, 14h01
  5. [Java][Socket] Pas de lecture de flux
    Par mavina dans le forum IO
    Réponses: 7
    Dernier message: 20/10/2006, 19h02

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