Cet article partage le code spécifique du serveur de téléchargement de fichiers Java et du client pour votre référence. Le contenu spécifique est le suivant
Server de téléchargement de fichiers:
/ ** * côté serveur à l'aide du protocole TCP pour implémenter la fonction de téléchargement * Idées: * Créez un nouveau serversocket * Attendez que le client se connecte * après la connexion, démarrez le thread enfant, passez la prise obtenue par la connexion à téléchargement du thread enfant * Looping * @author yajun * * / public class Telloadserver {public Static Void Main (String [] args) {uploadserver Server = New Uperver (); UploadThread Command = new uploadThread (); server.start (commande); } / ** * Fonction: Acceptez la connexion, démarrez le thread enfant, LOOP * @param Commande L'objet de thread enfant utilisé pour télécharger, qui implémente l'interface Runnable * / private void start (Commande UploadThread) {// Variable locale sertSocketocket = null; Socket transsocket; // Business Logic try {serversocket = new serversocket (55555); while (true) {System.out.println ("attendre la connexion ..."); transsocket = serversocket.Accept (); int i = 0; i ++; System.out.println ("th" + i + "connexion"); // avez-vous besoin de fermer le fil après le téléchargement? ? ? Command.SetSocket (transsocket); Executor.NewFixEdThreadPool (5) .ExECUTE (Commande); } // exception catch} catch (ioException e) {e.printStackTrace (); // Fermer Resource} enfin {try {serversocket.close (); } catch (ioException e) {e.printStackTrace (); }} // fin de try} // fin de connexion @Test public void testConnect () {// Tâche de test: exécutez d'abord le côté serveur, puis exécutez le client plusieurs fois. Le segment du serveur peut créer des threads enfants en continu, et le test est réussi // Préparation de test: construire un thread pour simuler le thread de téléchargement Commande UploadThread = new uploadThread (); start (commande); } @Test public void testdown () lève ioException {byte [] buf; BytearrayInputStream bis; String str = "canglaoshi.avi / ncontent, contenu, contenu"; buf = str.getBytes (); bis = new bytearrayInputStream (buf); UploadThread ut = new uploadThread (); ut.down (bis); }} // Sous-fil qui complète chaque classe de tâche de transmission UploadThread implémente Runnable {socket socket; public uploadThread () {} public uploadthread (socket socket) {this.socket = socket; } @Override public void run () {inputStream in; essayez {in = socket.getInputStream (); vers le bas (in); // Gestion des exceptions} catch (ioException e) {e.printStackTrace (); } enfin {try {socket.close (); } catch (ioException e) {e.printStackTrace (); }} // Test Code / * try {Thread.Sleep (5000); System.out.println (thread.currentThread (). GetName () + ", copyname () +"); } catch (InterruptedException e) {e.printStackTrace (); } * /} // fin de run public void setSocket (socket socket) {this.socket = socket; } // Méthode de téléchargement / ** * OBJECTIF: Écrivez des données dans InputStream à l'idée locale *: * 1. Obtenez le flux d'entrée, il est préférable de le passer dans le flux d'entrée au lieu de l'obtenir directement à partir du socket et de le transmettre pour utiliser des tests unitaires * 2. Lisez le nom de fichier à partir du flux d'entrée * 3. Down (inputStream in) lève ioException {// Char variable local ch; char [] namearr = nouveau char [256]; octet [] buf = nouveau octet [1024]; String name = ""; OutputStream out = null; // Logique métier essaie {// étape 1: obtenir le nom du fichier et construire le flux de sortie du fichier int i = 0; while ((ch = (char) in.read ())! = '/ n') {namearr [i ++] = ch; } //name=namiarr.toString() ;// cette phrase ne peut pas convertir un tableau de caractères en une chaîne. Vous devez utiliser le nom de l'instruction suivant = new String (NameArr); System.out.println ("Le fichier à télécharger est:" + nom); out = new FileOutputStream ("src // down //" + name); // Étape 2: Écrivez d'autres contenus dans le flux d'entrée dans le fichier int len; while ((len = in.read (buf))! = - 1) {out.write (buf, 0, len); } out.flush (); // Capture d'exception} catch (ioException e) {e.printStackTrace (); // Fermer la ressource} Enfin {// Question: deux captures peuvent-elles être assemblées? Comment gérer les exceptions lors de la fermeture du flux? joindre(); out.close (); } // debug system.out.println (name); }} // fin de téléchargement Client de téléchargement de fichiers:
/ ** * Client qui utilise le protocole TCP pour implémenter la fonction de téléchargement * @author yajun * / public class uploadClient {public static void main (String [] args) {uploadClient client = new uploadClient (); client.upload ("src // jeudi // aslistTest.java"); } / ** * Fonction: Téléchargez le fichier sur le serveur * 1. Établissez une connexion au serveur * 2. Obtenez le flux de sortie * 3. Écrivez le contenu du fichier au flux de sortie * 4. Obtenez la réponse du serveur * / private void upload (nom de chaîne) {socket socket = null; OutputStream out; try {socket = new socket ("127.0.0.1", 5555); out = socket.getOutputStream (); write2OutputStream (nom, out); // Capture d'exception} catch (inconnuhostException e) {e.printStackTrace (); } catch (ioException e) {e.printStackTrace (); }} @Test public void Testupload () {upload ("src // status.xml"); } / ** * Fonction: passez le nom du fichier et le flux de sortie, écrivez le fichier dans le flux de sortie * @param path * @throws ioException * / private void write2outputStream (String Path, OutputStream out) lève ioException {fileInputStream fis = null; octet [] buf = nouveau octet [1024]; String filename = ""; // Logique métier essaie {// 1. Écrivez le nom de fichier filename = path.substring (path.lastIndexof ('//') + 1); System.out.println ("Le nom de fichier que vous souhaitez télécharger est:" + nom de fichier); out.write (filename.getBytes ()); out.write ('/ n'); // 2. Écrivez le contenu de fichier fis = new FileInputStream (path); int len; while ((len = fis.read (buf))! = - 1) {out.write (buf, 0, len); } out.flush (); // Gestion des exceptions} catch (ioException e) {e.printStackTrace (); // ferme la ressource} enfin {fis.close (); out.close (); }} // fin de téléchargement @Test public void testWrite2OutputStream () lève ioException {byTearrayOutputStream out = null; essayez {out = new bytearrayoutputStream (); write2OutputStream ("src // status.xml", out); System.out.println (out.toString ("UTF-8")); } catch (ioException e) {e.printStackTrace (); } enfin {out.close (); }}}Cet article a été compilé dans "Résumé des techniques d'opération de téléchargement Java", et tout le monde est le bienvenu pour apprendre et lire.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.