Este artículo comparte el código específico del servidor de carga de archivos Java y el cliente para su referencia. El contenido específico es el siguiente
Servidor de carga de archivos:
/** * Server-side using TCP protocol to implement upload function* Ideas: * Create a new ServerSocket * Wait for the client to connect* After connecting, start the child thread, pass the Socket obtained by the connection to the child thread* Looping* @author yajun * */ public class UploadServer { public static void main(String[] args) { UploadServer server=new UploadServer(); Comando uploadThread = new uploadThread (); servidor.Start (comando); } /*** Función: Aceptar conexión, iniciar el hilo infantil, bucle* @param comando El objeto de subproceso infantil utilizado para descargar, que implementa la interfaz runnable* /private void start (comando uploadThread) {// local variable serversocket serversocket = null; Transmoción de socket; // Lógica de negocios intenta {Serversocket = new ServerSocket (55555); while (true) {System.out.println ("Espere la conexión ..."); transssocket = ServerSocket.accept (); int i = 0; i ++; System.out.println ("th"+i+"conexión"); // ¿Necesitas cerrar el hilo después de la descarga? ? ? Command.setsocket (transssocket); Ejecutors.newFixedThreadPool (5) .Execute (comando); } // Exception Catch} Catch (IOException e) {E.PrintStackTrace (); // cierre recurso} Finalmente {try {Serversocket.close (); } catch (ioException e) {E.PrintStackTrace (); }} // end de try} // end de connect @test public void testConnect () {// Tarea de prueba: primero ejecute el lado del servidor, luego ejecute el cliente varias veces. El segmento del servidor puede crear continuamente hilos infantiles, y la prueba es exitosa // Preparación de la prueba: construya un subproceso para simular el comando de descarga de subproceso de hilo = new uploadThread (); inicio (comando); } @Test public void testdown () lanza ioexception {byte [] buf; BytearrayInputStream BIS; Cadena str = "canglaoshi.avi/nContent, content, content"; buf = str.getBytes (); bis = new byteArrayInputStream (BUF); UploadThread ut = new uploadThread (); ut.down (bis); }} // Subcread que completa cada clase de tarea de transmisión, uploadThread implementa runnable {socket socket; public uploadThread () {} public uploadThread (socket socket) {this.socket = socket; } @Override public void run () {inputStream in; intente {in = Socket.getInputStream (); abajo (en); // Manejo de excepciones} Catch (IOException e) {E.PrintStackTrace (); } finalmente {try {Socket.close (); } catch (ioException e) {E.PrintStackTrace (); }} // Código de prueba/*try {Thread.sleep (5000); System.out.println (Thread.CurrentThread (). GetName ()+", copyname ()+"); } catch (InterruptedException e) {E.PrintStackTrace (); }*/} // final de la ejecución public void setSocket (socket socket) {this.socket = socket; } // Método de descarga/*** Objetivo: Escriba datos en InputStream a la idea local*:* 1. Obtenga la secuencia de entrada, es mejor pasarlo en la secuencia de entrada en lugar de obtenerlo directamente desde el Socket, y pasarlo a usar pruebas de unidad* 2. Lea el nombre del archivo de la secuencia de entrada* 3. Cree un nuevo archivo de salida y el archivo de salida* 4. Lea el contenido de archivo de la transmisión de entrada a la corriente de salida* 5 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @archivo Down (InputStream in) lanza IOException {// Variable local Char CH; char [] namearr = nuevo char [256]; byte [] buf = nuevo byte [1024]; Name de cadena = ""; OutputStream out = null; // Business Logic Try {// Paso 1: Obtenga el nombre del archivo y construya la transmisión de salida del archivo int i = 0; while ((ch = (char) in.read ())! = '/n') {namearr [i ++] = ch; } //name=namearr.ToString() ;// esta oración no puede convertir una matriz de caracteres en una cadena. Debe usar el siguiente nombre de instrucción = nueva cadena (namearr); System.out.println ("El archivo a descargar es:"+nombre); out = new FileOutputStream ("SRC // Down //"+Name); // Paso 2: Escriba otros contenidos en la transmisión de entrada al archivo int Len; while ((len = in.read (buf))! =-1) {out.write (buf, 0, len); } out.flush (); // Exception Capture} Catch (IOException e) {E.PrintStackTrace (); // Cerrar recurso} Finalmente {// Pregunta: ¿Se pueden juntar dos capturas? ¿Cómo lidiar con las excepciones al cerrar la transmisión? cercar(); out.close (); } // debug system.out.println (nombre); }} // final de la carga de carga Cliente de carga de archivos:
/ *** Cliente que usa el protocolo TCP para implementar la función de carga* @author yajun*/ public class ifoteClient {public static void main (string [] args) {uploadClient Client = new uploadClient (); client.upload ("src // jueves // aslisttest.java"); } / *** Función: cargar archivo en el servidor* 1. Establezca una conexión con el servidor* 2. Obtenga la transmisión de salida* 3. Escriba el contenido del archivo en la secuencia de salida* 4. Obtenga la respuesta del servidor* / Void private void (nombre de cadena) {socket socket = null; OutputStream Out; intente {socket = new Socket ("127.0.0.1", 5555); out = Socket.getOutputStream (); Write2OutputStream (nombre, fuera); // Captura de excepción} Catch (desconocidoHostException e) {E.PrintStackTrace (); } catch (ioException e) {E.PrintStackTrace (); }} @Test public void testupload () {upload ("src // status.xml"); } / ** * Función: Pase en el nombre del archivo y la transmisión de salida, escriba el archivo en la transmisión de salida * @param ruta * @throws ioexception * / private void write2outputStream (string ruta, outputStream out) lanza ioexception {fileInputStream fis = null; byte [] buf = nuevo byte [1024]; Cadena filename = ""; // Lógica de negocios intenta {// 1. Escriba el nombre del archivo FileName = Path.Substring (Path.lastIndexof ('//')+1); System.out.println ("El nombre del archivo que desea cargar es:"+nombre de archivo); out.write (filename.getBytes ()); out.write ('/n'); // 2. Escriba el contenido del archivo fis = nuevo fileInputStream (ruta); int len; while ((len = fis.read (buf))! =-1) {out.write (buf, 0, len); } out.flush (); // Manejo de excepciones} Catch (IOException e) {E.PrintStackTrace (); // cierre el recurso} finalmente {fis.close (); out.close (); }} // end de la carga @test public void testWrite2outputStream () lanza ioexception {byteArRayOutputStream out = null; intente {out = new ByteArRaReOutputStream (); write2OutputStream ("src // status.xml", out); System.out.println (out.toString ("utf-8")); } catch (ioException e) {E.PrintStackTrace (); } finalmente {out.close (); }}}Este artículo se ha compilado en "Resumen de las técnicas de operación de carga Java", y todos son bienvenidos a aprender y leer.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.