Luca:
Olá
fmeyer:
e o mais viavel que eu acho, é fazer um checksum …
paranoico ? hehehe
Não é não! Eu fazia quase assim já em 1994. Só que eu não usava checksum pois trocando bytes, o checksum é o mesmo. Eu usava CRC.
Meu antigo método (acho que já descrevi aqui em outra pasta):
-
No meu programa Clipper havia uma constante logo como primeira coisa no sistema.
-
Eu fiz um programinha que calculava o CRC do trecho de programa da linha seguinte à constante até o fim.
-
Usando um editor de binário, alterava a tal constante pelo valor do CRC calculado.
Meu programa tinha uma função que recalculava o CRC do mesmo modo que meu programinha e comparava com o valor do CRC. Se o cliente alterasse 1 byte, o CRC não batia mais.
Além disso, meus programas eram vendidos com relatórios personalizados para cada cliente. No topo de cada relatório saia o nome do cliente. Assim, mesmo que um funcionário do cliente roubasse o sistema, ele não podia alterar o nome que aparecia no topo dos relatórios. Este nome ficava dentro do sistema BEM ESCONDIDO.
No Java onde não existe um arquivo .exe monolítico como era o caso do Clipper, você pode pensar qualquer coisa. Mas nunca com checksum que não vale nada. Use sempre CRC, se possível CRC32. Para melhorar a performance do cálculo do CRC se deve fazer como a turma que escreve programas de comunicação e seguir os conselhos do grande Joe Campbell: armazenar uma tabela de lookup ao invés de calcular tudo na raça.
Acho que você deve encontrar várias APIs free de cálculo de CRC ou usar o que já vem com o Java na classe java.util.zip.CRC32. Compare os desempenhos pois isto pode demorar um tiquinho se nãofor bem escrito.
[]s
Luca
Oi Luca, esotu precisando saber fazer o seguinte:
Tenho uma aplicação cliente/servidor o cliente enviar arquivos para o servidor e preciso criar um calculo CRC no cliente a partir do polinomio
gerador que será utilizado, no meu caso:
x8 + x6 + x3 + x + 13
Acho que n aparte cliente ele pega esse polinomio + o binario do arquivo enviado (Que eu nem sei como pega um binario de um arquivo em java gostaria de saber) e envia no cabecalho.
No servidor é pego essa informacao e recalculado para ver se tem erro ou nao. (Não sei tb como pego essa informacao no servidor)
Em sockets tem como fazer isso para o controle de erros ? Ou so da pra saber os erros pelas exceptions geradas ?
Desculpe mas ta meio confuso, to lendo a respeito mas 
Ainda tenho que fazer um controle de fluxo na parte servidor com Go-back-n ou Selective Reject.
Sabe me dar alguma dica quanto a isso.
Agradeco muito.
Abraços