2010-06-21 5 views
0

Je suis en train de télécharger un fichier en utilisant socket et le serveur en Java.erreur lors du téléchargement de fichier dans java-java.net.SocketException: connexion réinitialisée

myClient = new Socket(address,port); 
    myClient.setSoTimeout(MyFileManager.TIME_OUT); 
    in = new DataInputStream(myClient.getInputStream()); 
    out = new DataOutputStream(myClient.getOutputStream()); 
File requestedFile = new File(_fileManager.getDir()+fileName); //creating the new file 
//   requestedFile.createNewFile(); //now it does 
      fos = new FileOutputStream(requestedFile); 
      long size = in.readLong(); //get the size 
      for (int i=1; i<=size; i++) { 
      try { 
      fos.write(in.read()); 
      } 
      catch (IOException e) { 
      e.printStackTrace(); 
      } 
      } 

J'envoie de l'autre côté de la taille du fichier, puis l'envoi de chaque octet, juste avant la fin d'octets, il jette l'exception ci-dessus, en disant remise à zéro conncetion.

quel pourrait être le problème?

Merci!

+0

Veuillez formater votre code en utilisant [Markdown] (http://stackoverflow.com/editing-help). – bdhar

+0

Je me demande où vous avez trouvé une méthode 'DataInputStream.read (void)'. – msw

Répondre

0

Je pense que la boucle doit être quelque chose comme:

for (int i=0; i<size; i++)... 

Depuis flux sont basés 0. De plus, vous pouvez continuer à lire jusqu'à ce que vous atteigniez l'EOF au lieu de lire un nombre spécifique d'octets. Voir this tutorial pour savoir comment :)

1

Pourquoi pensez-vous que cette ligne renvoie le nombre d'octets dans le flux ??

long size = in.readLong(); //get the size 

Vous devriez faire in.read() jusqu'à ce qu'il renvoie -1.

Questions connexes