Preciso enviar um arquivo txt através de DatagramSocket. Qual seria a melhor forma de fazer isso? Preciso ler o arquivo e atribuir esse texto pra uma String, para assim enviar o arquivo? Ou há a possibilidade de enviar o arquivo diretamente sem a necessidade de passá-la para uma String?
Leia o arquivo em grupos de no máximo 1400 bytes. Transfira esses bytes pelo socket UDP.
O problema, é claro, é que você pode ter pacotes que acabem “faltando”, pela própria natureza do protocolo UDP, que não é confiável. Você precisa criar seu protocolo, se sua exigência é que não faltem pedaços.
Eu já implementei um servidor, é bem simples. APIs para clientes vc acha por aí, como a do projeto jakarta.
O protocolo já cobre esses detalhes que o entaglement falou: ordenação e sequencia dos pacotes.
C
capitao
Obrigado pelas respostas!
Teria como tu me ensinar a ler tal arquivo com um determinado tamanho de bytes? Como quando tu disse “Leia o arquivo em grupos de no máximo 1400 bytes”?
Obrigado mais uma vez!
E
entanglement
Dica: tente implementar o tal servidor TFTP, ou procure uma implementação em Java na Internet.
De qualquer maneira, se quiser ficar quebrando a cabeça, só vou explicar como ler um arquivo de 1400 em 1400 bytes, e copiá-lo para outro arquivo. Leia a documentação, que é melhor para sua saúde mental que ficar quebrando a cabeça, tentando sem parar sem entender o que está fazendo.
importjava.io.*;classTesteLeitura{publicstaticvoidmain(String[]args){BufferedOutputStreambos=null;BufferedInputStreambis=null;try{bis=newBufferedInputStream(newFileInputStream("teste.txt"));bos=newBufferedOutputStream(newFileOutputStream("saida.txt"));byte[]buffer=newbyte[1400];for(intnBytesLidos=bis.read(buffer);nBytesLidos>0;nBytesLidos=bis.read(buffer)){// Atenção, amigo: É EXTREMAMENTE IMPORTANTE pegar o número de bytes lidos.// Se não fizer isso, você pode ter vários problemas (como mandar mais bytes que // o realmente necessário. // NESTE CASO, ESTAMOS ESCREVENDO EM UM ARQUIVO, MAS VOCÊ PODE, POR EXEMPLO,// ENVIAR UMA MENSAGEM.bos.write(buffer,0,nBytesLidos);}}catch(IOExceptionex){ex.printStackTrace();}finally{// É INDISPENSÁVEL FECHAR OS ARQUIVOS. SE SEU PROFESSOR DISSE QUE NÃO É PRECISO,// POR CAUSA DO GARBAGE COLLECTOR, ENTÂO ELE NUNCA ESCREVEU UMA APLICAÇÂO DE VERDADE.if(bos!=null)try{bos.close();}catch(IOExceptionex2){}if(bis!=null)try{bis.close();}catch(IOExceptionex2){}}}}