quinta-feira, 29 de março de 2012

Versão com DataInputStream, DataOutputStream e Exception do código java de servidor tcp de echo do livro do Kurose

Como entendi que o código da página 120 do livro Redes de computadores e a internet: uma abordagem top-down. 5. ed - KUROSE, James F; ROSS, Keith W. Redes de computadores e a internet: uma abordagem top-down. 5. ed. São Paulo: Pearson Education, 2011. 614 p. ISBN 9788588639973 (broch.) [
KUROSE, James F; ROSS, Keith W. Redes de computadores e a internet: uma abordagem top-down. 3. ed. São Paulo: Makron Books, c2006. 634 p. ISBN 9788588639188 (broch.). - página 117 ]induz o leitor ao erro por não trabalhar com as exceptions, que não são poucas, bem como usar BufferedReader ao invés de DataInputStream (BufferedReader não é a melhor alernativa se for trabalhar com envio de arquivos) resolvi fazer uma versão dele com exception e utilizando DataInputStream e DataOutputStream.

O código do Cliente TCP do Kurose:

http://presenteperfeito.99k.org/blog/java/kuroseTCPSocket/TCPClientKurose_java.html


O código do Servidor TCP do Kurose:
http://presenteperfeito.99k.org/blog/java/kuroseTCPSocket/TCPServerKurose_java.html


Já o código do meu Cliente TCP
http://presenteperfeito.99k.org/blog/java/kuroseTCPSocket/TCPClientDM_java.html
Apenas lembrando que para funcionar é necessário que tanto o cliente como servidor sejam compilados juntos (javac TCPServer.java TCPClient.java), pois o cliente utiliza a porta e o host definidos no servidor (para mudar o host e a porta apenas no servidor, e garantir que tanto o cliente como servidor terão a mesma porta)

http://presenteperfeito.99k.org/blog/java/kuroseTCPSocket/TCPServerDM_java.html


Estava tentando enviar arquivos via sockts java, só que ocorriam alguns erros intermitentes, após muitas pesquisas descobri através de
http://javafree.uol.com.br/topic-880337-sockets-perdendo-pacotes.html, que realmente pode acontecer, hora funcionar, hora não, se utilizar a tripa de buffers desorganizado, como sugerido pelo código do Kurose.
Resultado terei que implementar novamente toda a minha comunicação para enviar o arquivo, tudo devido a inexperiência e inobservância do detalhe que é recomendada a leitura e escrita de sockets com DataInputStream e DataOutputStream.

Apenas lembrando que o objetivo do código do Kurose é ser didático, não um código bom para servir de base para implementações TCP em java.

Os meus códigos e do Kurose coloquei tudo compactado em .zip em:

http://presenteperfeito.99k.org/blog/java/kuroseTCPSocket/KuroseDM.zip

Nenhum comentário: