Galera to com um problemão, e não sei nem por onde começar,
tenho que enviar um arquivo de um cliente para um servidor, porém esse não é o problema, afinal já consegui resolver isso, o problema real é que tenho que “espedaçar” o arquivo em vários arrays de 50 bytes e enviar um de cada vez, e a cada um que chegar no servidor eu validar com CRC32 e caso não tenha chegado ok, retornar e enviar novamente, a bronca está nessa comunicação de um lado para o outro, conto com a ajuda de vcs, apenas re-lembrando já consegui enviar o arquivo inteiro, mas agora tenho que espedaça-lo e enviar os byte[].
Mas porque você tem que fazer essa quebra ? Porque na prática, o protocolo TCP já faz isso pra você.
guisantogui
Eu tenho que enviar isso via UDP!
ViniGodoy
Implemente o protocolo TFTP (se for rede local);
Use TCP (se for internet).
Usar UDP para enviar arquivos, a menos que seja em broadcast, é extremamente ineficiente.
guisantogui
Então Vinny o problema que isso é uma implementação para faculdade, e o professor exigiu em UDP, até to conseguindo montar os arrays de 50 bytes, mas não tenho a mínima idéia de como desmontar e juntar todos eles novamente!
Alguma dica?
ViniGodoy
Você provavelmente vai ter que iniciar com um pacote indicando a quantidade de bytes que serão transmitidos.
Eu também colocaria em cada pacote UDP uma numeração para o pacote, para que o outro lado da conexão possa solicitar a retransmissão e dizer quem precisa ser retransmitido. Isso também resolve o problema do fato de, ocasionalmente, um pacote UDP não chegar.
Montar os arrays, então, seria apenas uma questão de criar um array maior e copia-los lá lado a lado. Ou, como a transmissão é de arquivos, escrever esses arrays em ordem num OutputStream.
Nesse link, eu deixei um chat em UDP. Junto com o chat há um programa que simula erros na conexão UDP, tais como perda de pacotes, alteração de ordenação, etc.
Seria uma boa você utiliza-lo ao validar seu trabalho:
guisantogui
O problema de montar os arrays de bytes consegui resolver, brigadão pela ajuda pessoal!
Mas com certeza voltarei com mais alguns bugs para vcs.
ViniGodoy
Conseguiu resolver como?
guisantogui
depurando e contando bit, foi meio roots mas deu certo, eu meio que usei POG, mas final de semestre faz parte.