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 :

Annuler une reception


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Annuler une reception
    Bonjour, enieme topic que je fait mais bon c'est un sujet different, et malgre mes recherche rien ne s'en approche :

    La question est simple :

    comment peut on annuler une reception d'un fichier du cote client ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // envoi la taille du fichier au serveur
    			String size = "#" + fic.length() + "#" + fic.getName() + "#\n";
    			out.write(size.getBytes());
    			int limite = new Long(fic.length()).intValue();
    			// envoi le fichier via le tableau de byte
    			for (int i = 0; i < limite; i++) {
    				byte[] temp = new byte[1];
    				temp[0] = ficBinaire[i];
    				out.write(temp);
    				out.flush();
    				// System.out.println(i);
    			}
    			fluxFic.close();
    Voici le bout de code cote serveur :

    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
    String temp = inString.readLine();
    			if(temp == null){return true;}
    			StringTokenizer strTk = new StringTokenizer(temp, "#");
    			long Size = Integer.parseInt(strTk.nextToken());
    			String OldName = strTk.nextToken();
    			int indexExt = OldName.lastIndexOf('.');
    			String FicName = OldName.substring(0, indexExt) + "_copy"
    					+ OldName.substring(indexExt);
     
    			FileOutputStream fic = new FileOutputStream(FicName);
    			long k = 0;
    			byte[] tmp = new byte[1];
    			in.read(tmp);
    			long Start = System.currentTimeMillis();
    			while (k < Size - 1) {
    				fic.write(tmp);
    				in.read(tmp);
    				k++;
    			}
    			fic.close();
     
    			// statistiques
    			long End = System.currentTimeMillis();
    			long nbOctet = k / 8;
    			long vitesse = nbOctet / ((End - Start) / 1000 + 1);
    			System.out.println("FIN RECEPTION : " + nbOctet + " octets copie,"
    					+ vitesse + " oct/sec n " + FicName);
    J'ai essaye via un in.reset, mais sans succes, des exception du style "mark not supported" ou "incorrect mark" sont levee (j'ai pas bien compris le system des mark mais ca ressemble un peu a une "sauvegarde").

    Pour l'envoi j'ai reussi a faire un reset sur le out, et ca fonctionne (c'est peut etre un peu crade mais ca marche).

    Voila donc si vous avez des idees...

  2. #2
    Invité
    Invité(e)
    Par défaut
    Pas de reponse ...

    Bon j'ai decide de regler mon probleme de maniere classique, comme ftp : creer une connexion de contrle lors d'un envoi ou d'une reception, dans ma boucle de reception et d'envoi j'ai ajoute une condition qui verifie qu'une variable d'instance (volatile) n'est pas a true, si elle y est on sort de la boucle.

    La valeur de la variable est changee par un evenement bouton cote client, et par un thread cote serveur.Des que le client clique sur un bouton, isCanceled passe a true, le client sort de la boucle et envoi true via l'autre connexion.Le serveur attendai un booleen dans un autre thread et change la valeur de son isCanceled.

    Je fait donc a ce moment la un flush() du cote du serveur, sinon les donne mise avec write seront envoyee lors de la prochaine transaction et ca plante tout (ben oui si au lieu de "UP" tu recoi "toutelesinfoenbordeldufichierenvoyeUP").

    Probleme : Je n'arrive pas a vider mon inputstream correctement j'ai essaye ca par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(in2.skip(1)==1){}
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(in2.read()!=-1){}
    mais le client se bloque a ce moment la ...

    Donc si vous saviez comment faire en sorte que je puisse faire en sorte que mes deux stream soit vide pour pouvoir reprendre le protocole comme il faut.

Discussions similaires

  1. [FLASH MX] Annuler une commande
    Par noarno dans le forum Flash
    Réponses: 1
    Dernier message: 26/07/2005, 17h32
  2. annuler une impression en cour
    Par mondanikoffi dans le forum Bases de données
    Réponses: 1
    Dernier message: 05/07/2005, 20h56
  3. [Info]comment annuler une Externalization string?
    Par car dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 17/04/2005, 09h51
  4. Annuler une insertion dans un Trigger
    Par dreamanoir dans le forum Oracle
    Réponses: 2
    Dernier message: 10/01/2005, 13h04
  5. Annuler une suppression
    Par Harbaingan dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 09/04/2003, 14h59

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