Transferencia de arquivos.

1. Transferencia de arquivos.

Renato Müller Rosa
shadowzaum

(usa Ubuntu)

Enviado em 03/12/2010 - 21:03h

Bom, sou novo nessa parte de transferencia de arquivos e estou com um trabalho de aula.
O trabalho consiste em uma aplicação de comunicação via socket, fazendo um cliente e um servidor. O meu em si seria estilo uma aplicação FTP, onde eu teria um comando ls -l (já implementado) e um put e get. Bem "simples".
O problema agora está na transferencia/manipulação de arquivos. Sei que vou ter que utilizar um protocolo (TCP ou UDP), porem não sei como implementar isso.

Então ficaria grato se alguem tivesse um exemplo ou pudesse passar funções que me ajudariam no trabalho. Enfim, preciso de uma luz.
Ah, pesquisei no forum até, mas não achei algo parecido. '-'

Agradeço desde já.


  


2. Re: Transferencia de arquivos.

Fagner Amaral de Souza Candido
f_Candido

(usa Ubuntu)

Enviado em 03/12/2010 - 23:05h

Olá,

Bom, pelo que entendi você já domina a API de sockets. Uma sugestão seria enviar um fluxo de dados por vez, por exemplo, 1024, e ir enviando até chegar ao fim do arquivo. Um pensamento bem básico seria este... Enviar fluxo de dados, e controlar o início e fim do arquivo.


Abraços e espero ter ajudado


3. Re: Transferencia de arquivos.

Mauricio Souza Klein
Hebang

(usa Arch Linux)

Enviado em 03/12/2010 - 23:36h

Ola!

Com sockets propriamente dito, eu não vou comentar pois nunca trabalhei com isso.

Mas posso recomendar uma api, chamada gSoap, que trabalha exclusivamente com modelo cliente/servidor, fazendo a troca de mensagens via XML (que é invisível ao programador). De posse disso, há mecanismos para converter um arquivo byte a byte em um modelo aceito pelo XML, bem como o restaurar no destino. Claro que é uma solução muito mais abrangente que a sua dúvida, mas funciona.

Espero ter ajudado!


4. Re: Transferencia de arquivos.

Renato Müller Rosa
shadowzaum

(usa Ubuntu)

Enviado em 04/12/2010 - 00:17h

@f_Candido

Entendi o que você quis dizer, porem não domino tanto a API de sockets. Então eu consegui abrir a conexão e fazer o comando ls e realmente empaquei. Tem como você indicar algo que explique sobre o fluxo de dados? Ou dar um exemplo para eu me basear.
Obrigado, e desculpe o abuso.

@mklein

Vou dar uma olhada amanhã sobre isso com mais calma. Valew pela dica.


Continuo procurando uma solução e obrigado a todos pela ajuda.


5. Re: Transferencia de arquivos.

Fagner Amaral de Souza Candido
f_Candido

(usa Ubuntu)

Enviado em 04/12/2010 - 00:38h

Opa,

Vamos lá: Aqui no Vol: http://www.vivaolinux.com.br/artigo/BSD-Sockets-em-linguagem-C/
Excelente artigo sobre sockets. Além disso, há o livro do Stevens sobre Sockets, muito bom, recomendo.
Bom, com este material vai ficar bem mais fácil, tão logo,
Qualquer dúvida posta aí.


Abraços


6. Re: Transferencia de arquivos.

Renato Müller Rosa
shadowzaum

(usa Ubuntu)

Enviado em 16/12/2010 - 22:49h

Infelizmente não consegui implementar a transferencia de arquivo que eu queria, então tive que mudar o foco do projeto.
Vi que envolve controle de fluxo e o tempo era curto pra fazer (levando em conta que não era a unica coisa para fazer no momento).

O que posso é dizer pra quem vai tentar algo do genero (e eu pretendo tentar em um futuro próximo) é o que tentei fazer.
Inicialmente ele leria um arquivo X, então eu pegaria o arquivo e salvava o valor binario dele em uma variavel, ai já vi um problema, pois caso o arquivo fosse muito maior que a memória do computador, ele não salvaria completo ou não finalizaria o ponteiro e então mandaria qualquer lixo.
Então depois eu pegaria esse binario e jogaria em um arquivo, o que acredito que salvaria o arquivo de forma igual a antiga.

Era mais ou menos isso a lógica aplicada tanto no servidor quanto no cliente (pra fazer um get e um put).
Lembrando que não sou expert nisso, sou estudante de Telecomunicações e então a enfase do meu curso não é muito a programação, então pode ser que minha lógica do programa esteja totalmente errada.

Ah, e estava usando o protocolo TCP e para salvar o arquivo em binario eu usava fopen(arquivo, "b").

Então agradeço a todos que tentaram ajudar e assim que tudo estiver funcionando no projeto com o novo foco, posso postar aqui para vocês darem uma olhada, pois pode ajudar outras pessoas.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts