Erro em socket write int

1 resposta
N

Boa tarde galera, estou mudando o modo em que meu programa envia o arquivo. Então desenvolvi um “protocolo”, só que esse protocolo envia os 102400 bytes (tamanho do buffer) que eu criei, e depois envia números aleatórios

Código server:

FileInputStream fis = new FileInputStream(file);  
			BufferedInputStream bis = new BufferedInputStream(fis);
			DataOutputStream envia = new DataOutputStream(usuario.getSocketFTP().getOutputStream());

			int tamanho = 102400; // buffer de 100KB    
			byte[] buffer = new byte[tamanho];    
			int lidos = -1;

			System.out.println("Transferência de: " + caminho + " começou.");
			while ((lidos = fis.read(buffer, 0, tamanho)) != -1)
			{
				System.out.println("Tentando enviar " + lidos + " bytes");
				envia.writeInt(lidos);
				envia.write(buffer, 0, lidos);
				System.out.println("Enviando");
			}
			System.out.println("Transferência de: " + caminho + " terminou.");

			saida.flush();
			bis.close();

‘lidos’ no caso sempre está printitando 102400 (tamanho do meu buffer, o problema ocorre no lado do cliente)

CLiente:

int recebido = entradaFTP.readInt();
						System.out.println(recebido + "");
						while(recebido > 0) {
							bytesRead = entradaFTP.read(cbuffer);
							fos.write(cbuffer, 0, bytesRead);
							fos.flush();
							recebido = entradaFTP.readInt();
							System.out.println(recebido + " recebido");
						}
						System.out.println(recebido + "");

Recebido no primeiro looping vira 102400, mas no segundo já muda de valor:
[telefone removido] recebido
-[telefone removido] recebido
-[telefone removido]

Alguém poderia me ajudar?

1 Resposta

G
while(true) {                          
                          int recebido = entradaFTP.readInt();  
                          System.out.println(recebido + "");  
                          if (recebido <= 0) Break;

                          while(recebido > 0) {  
                              bytesRead = entradaFTP.read(cbuffer, 0, recebido);  
                              fos.write(cbuffer, 0, bytesRead);  
                              recebido = recebido - bytesRead; //pq nem sempre vc recebe td q enviou de uma unica vez. 
                          }  
                        }  
                        fos.flush();
Criado 27 de julho de 2015
Ultima resposta 27 de jul. de 2015
Respostas 1
Participantes 2