📄 hilotxfileservidor.java
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package controlador;import java.io.*;import java.net.Socket;import java.util.logging.Level;import java.util.logging.Logger;/** * * @author Camilo Andres */public class hiloTxFileServidor extends Thread{ private Socket conTxFile; private String rutaArchivo; private ObjectOutputStream salidaDatos; private ObjectInputStream entradaDatos; public hiloTxFileServidor(Socket conTxFile, String rutaArchivo) throws IOException { this.conTxFile = conTxFile; this.rutaArchivo = rutaArchivo; salidaDatos=new ObjectOutputStream(conTxFile.getOutputStream()); entradaDatos=new ObjectInputStream(conTxFile.getInputStream()); start(); } public void run() { try { System.out.println("esperando para transmitir."); entradaDatos.readObject(); System.out.println("listo para transmitir"); //archivo que se va a descargar. File f = new File("files\\" + rutaArchivo); //flujo de entrada de los datos del archivo, se usa para leer el archivo. FileInputStream fin = new FileInputStream(f); long sizeFile = f.length(); //se va a enviar el archivo en bloques de 100 bytes. //se calcula cuantos bloque hay, int numBloques = (int) (sizeFile/hiloCliente.TAM_BLOQUE); //los byte que sobren que no alcancen a formar un bloque. int tamResto = (int) (sizeFile%hiloCliente.TAM_BLOQUE); //para cumplir el protocolo, el servidor le envia al //lee el arreglo de TAM_BLOQUE los bytes del arreglo //el tamaño del archivo y el tamaño del bloque //que va a enviar para que sepa como reconstruir el archivo. //enviarMensajeCliente("RECIBIR_ARCHIVO"); enviarMensajeCliente(sizeFile); //tamaño del archivo enviarMensajeCliente(hiloCliente.TAM_BLOQUE); //tamaño del bloques. System.out.println(numBloques+" a transmitir "+ "con tamaño de "+hiloCliente.TAM_BLOQUE+" y un resto de "+tamResto); //lee los numBloques bloques del archivo y los envia. long bytesTx=0; for (int i = 0; i < numBloques; i++) { byte[] datos = new byte[hiloCliente.TAM_BLOQUE]; //lee el arreglo de TAM_BLOQUE los bytes del arreglo fin.read(datos); //y los envia al cliente que los espera. enviarMensajeCliente(datos); bytesTx+=hiloCliente.TAM_BLOQUE; System.out.println(i+"-"+bytesTx+" de "+ sizeFile); } //hay que enviar el sobrante, leyendolo del archivo byte[] datos = new byte[tamResto]; fin.read(datos); //y los envia al cliente que los espera. enviarMensajeCliente(datos); fin.close(); } catch (ClassNotFoundException ex) { Logger.getLogger(hiloTxFileServidor.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(hiloTxFileServidor.class.getName()).log(Level.SEVERE, null, ex); } finally { try { conTxFile.close(); } catch (IOException ex) { Logger.getLogger(hiloTxFileServidor.class.getName()).log(Level.SEVERE, null, ex); } } } /** * metodo para enviar un mensaje al clietne remoto * @param msj que se va a enviar. de tipo Object para * poder enviar cualquier cosa. */ public void enviarMensajeCliente(Object msj) throws IOException { salidaDatos.writeObject(msj); salidaDatos.flush(); salidaDatos.reset(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -