-1
votes

Erreur dans le programme de transfert de fichiers client de serveur?

Classe de serveur:

import java.io.*;
import java.net.*;

public class clientserver {
    public static void main(String args []) {
      Socket s=new Socket("localhost",2345);
      FileOutputStream f=new FileOutputStream("E:\\FEATUREDCOPIED.txt");
      DataInputStream din= new DataInputStream(s.getInputStream);
      byte[] b=new byte[2002];
      din.read(b,0,b.length);
      f.write(b,0,b.length);
        din.close();
        f.close();
        s.close();
    }
}


0 commentaires

3 Réponses :


2
votes

getInputtream et getOutputtream sont des méthodes, vous devez donc les appeler, ce qui signifie de mettre entre la parenthèse après leur nom: s.getinputStream () au lieu de juste s.getinputtream .


0 commentaires

1
votes

Mind the Paranthèses, puisque vous appelez une méthode dans Socket: s.getoutoutputtream ** () ** s.getinputtream ** () **


0 commentaires

-1
votes

** Code corrigé **

Les bugs fixes sont

1.Change S.GetInputStream -> S.GetInputStream ()

2.Change S.GetoutPutStream -> S.GetUPTUTStream ()

3.Créez une boucle pour la lecture et l'écriture dans le fichier, sinon les données peuvent perdre des données.

Classe de serveur < Pré> xxx

Classe client : xxx


4 commentaires

Fournir un code de copie-pâte sans commentaire est une idée terrible, car elle n'enseigne rien. En outre, vous n'avez même pas réparer la lecture brisée-sans-boucle.


@ Joachim Sauer Je suis incapable de comprendre votre commentaire. Pouvez-vous s'il vous plaît élaborer-le? Ensuite, je peux résoudre ce problème que vous souhaitez spécifier.


Il y a deux problèmes: 1. Vous postez le code sans explication de ce que vous avez fixé, cela n'aide pas à l'apprentissage. 2. Vous appelez lisez sans vérifier la valeur de retour. Lire n'est pas garanti de lire la longueur totale du INPUTStream et de l'appeler en dehors d'une boucle est presque toujours fausse.


@ Jochimsauer J'ai eu votre point que vous avez raison, j'ai réparé le bogue.