public void transferirArquivo(final Socket origem, final File arquivo) {
		Thread worker = new Thread(new Runnable() {
			@Override
			public void run() {
				latch = new CountDownLatch(1);
				
				try {
					out = new DataOutputStream(origem.getOutputStream());
					BufferedInputStream in = new BufferedInputStream(new FileInputStream(arquivo));
					
					out.writeUTF(Mensagem.ARQUIVO.toString());
					out.writeUTF(arquivo.getName());
				
					try {
						latch.await();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					
					int theByte;
					int total = 0;
					int progresso = 0;
					int intervalo = (int) (arquivo.length() / 100);
					out.writeInt(intervalo);
					while ((theByte = in.read()) != -1) {
						total++;
						if (total % intervalo == 0) {
							progresso++;
							mensageiro.comunicar(origem, progresso);
						}
						out.write(theByte);
						out.flush();
					}
					in.close();
				} catch (SocketException e) {
					mensageiro.comunicar(origem, Mensagem.TRANSFERENCIA_INTERROMPIDA);
				} catch (IOException e) {
					mensageiro.comunicar(origem, Mensagem.ERRO_IO);
				} finally {
					try {
						out.close();
					} catch (IOException e) {
						/* Já está fechado */
					}
				}
			}
		});
		worker.start();
	}