?? hilotxfilecliente.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.Observable;import java.util.logging.Level;import java.util.logging.Logger;import vista.dialogoProgresoArchivo;/** *clase que implementa el hilo que transimitira el archivo * al servidor. esta clase es observable y como sera un hilo implementa * la interfaz runnable para que pueda ser hilo. * @author Camilo Andres */public class hiloTxFileCliente extends Observable implements Runnable{ public static int TAM_BLOQUE=1024; private Socket conTxFile; private String rutaArchivo; private ObjectOutputStream salidaDatos; private ObjectInputStream entradaDatos; private dialogoProgresoArchivo dialogo; /** * constructor que recibe el socket por donde va a transmitir el archivo * y laruta del archivo que va a trasmitir. * @param conTxFile * @param rutaArchivo * @throws java.io.IOException */ public hiloTxFileCliente(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(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/TAM_BLOQUE); //los byte que sobren que no alcancen a formar un bloque. int tamResto = (int) (sizeFile%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. //enviarMensajeServidor("RECIBIR_ARCHIVO"); enviarMensajeServidor(sizeFile); //tama?o del archivo enviarMensajeServidor(TAM_BLOQUE); //tama?o del bloques. //cuadro de dialogo donde se muestra el proceso de la descarga. dialogo=new dialogoProgresoArchivo(rutaArchivo, sizeFile); //a?ade a esta clase que es observable el observador que //sera el dialogo que se acabo de crear. addObserver(dialogo); System.out.println(numBloques+" a transmitir "+ "con tama?o de "+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[TAM_BLOQUE]; //lee el arreglo de TAM_BLOQUE los bytes del arreglo fin.read(datos); //y los envia al cliente que los espera. enviarMensajeServidor(datos); bytesTx+=TAM_BLOQUE; System.out.println(i+"-"+bytesTx+" de "+ sizeFile); setChanged();notifyObservers(bytesTx); 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. enviarMensajeServidor(datos); fin.close(); setChanged();notifyObservers(sizeFile); //System.out.println(i+"-"+bytesTx+" de "+ sizeFile); } catch (ClassNotFoundException ex) { Logger.getLogger(hiloTxFileCliente.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(hiloTxFileCliente.class.getName()).log(Level.SEVERE, null, ex); } finally { try { conTxFile.close(); } catch (IOException ex) { Logger.getLogger(hiloTxFileCliente.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 enviarMensajeServidor(Object msj) throws IOException { salidaDatos.writeObject(msj); salidaDatos.flush(); salidaDatos.reset(); }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -