Estou com um pequeno problema para tranferir arquivos via socket e gostaria da ajuda de vocês.
A transferência de arquivo está ocorrendo, mas o arquivo chega vazio no Cliente.
Estou transferindo do Server para o Client o arquivo teste.txt.
O código é o seguinte:
publicstaticvoidmain(String[]args){ServerSocketserv;Socketskt=null;try{serv=newServerSocket(7000);skt=serv.accept();Filearquivo=newFile("C:\\teste.txt");DataInputStreamin=newDataInputStream(newFileInputStream(arquivo));DataOutputStreamout=newDataOutputStream(skt.getOutputStream());byte[]cache=newbyte[10240];intsize=0;while((size=in.read(cache))>-1){out.write(cache,0,size);}skt.close();//in.close();//out.close();//skt.close();//Trata possíveis exceções}catch(IOExceptione){System.out.println("Algum problema ocorreu ao criar ou enviar dados pelo socket."+e.getMessage());}finally{}}
bufferCli = new byte[in.available()];
while (in.read()!=-1)
out.write(bufferCli);
enquanto vc lê o DataInputStream vc escreve bufferCli. Em nenhum momento bufferCli recebe alguma coisa do DataInputStream, logo vc está imprimindo “nada”.
A
allex1
peczenyj obrigado pela resposta.
Mas como eu poderia resolver isso então?
É a primeira vez que preciso de utilizar socket, por isso estou num pouco perdido.
Obrigado
Allex
ViniGodoy
Mude para isso:
bufferCli = new byte[in.available()];
int readByte = in.read();
while (readByte !=-1) {
out.write((byte)readByte);
readByte = in.read();
}
A
allex1
ViniGodoy obrigado pela resposta.
Mas está dando erro na 5ª linha do seu código:
bufferCli = new byte[in.available()];
int readByte = in.read();
while (readByte !=-1) {
out.write((byte)readByte);
byte = in.read(); <<<---- ERRO AQUI
}
ViniGodoy
Corrigido.
A
allex1
ViniGodoy , desculpe a insistência, mas ainda da erro na primeira linha
bufferCli = new byte[in.available()]; //<<<----ERRO
int readByte = in.read();
while (readByte !=-1) {
out.write((byte)readByte);
readByte = in.read();
}
ViniGodoy
Ajuda se você dizer que erro foi, ou colar a exceção aqui.
Você mesmo não consegue corrigir?
O código ali era ilustrativo. Acostume-se com isso aqui. Geralmente a gente põe um código para mostrar o caminho para resolver seu problema, mas poucos vão criar um projeto, escrever o código, compilar, testar e te dar um 100% funcional.
É provável que você tenha que declarar a variável bufferCli.
byte[] bufferCli = new byte[in.available()];
Aliás, esse código nem sequer é meu… mas seu… dá uma olhada no que você postou ali em cima e você vai ver que essa linha é idêntica a que você já tinha! Será que você não apagou a declaração no copy&paste?
moacirjava
Aproveitando o tópico...
estou com um probleminha também, dem uma olhada no seguinte código:
Trabalhando com o padrão MVC, eu tenho uma classe de controle no pacote do controlador, ai está a classe:
packagecontrole;importvisao.Tela;importmodelo.Cliente;importmodelo.Servidor;publicclassControlador{staticTelatela;staticClientecliente;staticServidorservidor;booleanterminal;staticStringemail;staticStringassunto;staticintip1;staticintporta;publicControlador(){}publicstaticvoidmain(Stringargs[]){tela=newTela();tela.setVisible(true);while(true){if(tela.getConectaCli()==true){tela.setConectaCli(false);newThread(cliente).run();cliente.envia("a",1,1);//esse método envia string, int, int.//por que esse método não pode ser chamado aqui? ele dá um erro//e pede pra cria-lo na classe cliente sendo que ele já existe!}if(tela.getConectaSer()==true){tela.setConectaSer(false);newThread(servidor).start();}}}//fim do main.privatestaticStringgetEmail(){returnemail=tela.getEmail();}privatestaticintgetIp1(){returnip1=tela.getIp1();}privatestaticintgetPorta(){returnporta=tela.getPorta();}}
moacirjava
Gente por favor desculpem minha falta de atenção…
A
allex1
ViniGodoy obrigado,
Consegui resolver o problema.
Agora está funcionando.