receber arquivos.

Delphi

03/10/2006

ola pessoal..
tenho o seguinte problema..

eu preciso receber um arquivo que enviado para uma porta especifica do meu servidor.

soh que eu não sei como é enviado esse arquivo para mim, só sei que ele vem para uma porta do meu servidor.

alguém saberia como eu poderia pegar esse arquivo?


Zumbi

Zumbi

Curtidas 0

Respostas

Massuda

Massuda

03/10/2006

...soh que eu não sei como é enviado esse arquivo para mim...
Não tem como receber o arquivo sem saber ´como é enviado´; procure se informar sobre qual protocolo é utilizado.


GOSTEI 0
Zumbi

Zumbi

03/10/2006

será envia via protocolo tcp a porta 2424..

via socket.. soh que o servidor não foi minha aplicação que desenvolveu..

eu teria que fazer um client para receber esse arquivo..


GOSTEI 0
Massuda

Massuda

03/10/2006

Precisa de mais detalhes para desenvolver o client. Peça informações sobre o protocolo de transferencia de dados/arquivos a quem desenvolveu o servidor.

De modo bem simplificado... TCP simplesmente define como pacotes de dados são trocados entre máquinas, mas não se precupa com o conteúdo dos pacotes; o protocolo define como tratar o conteúdo dos pacotes.


GOSTEI 0
Zumbi

Zumbi

03/10/2006

pelo que eles me informaram, seria feito uma conexão via socket, ai eu teria que enviar um arquivo txt, e eles me retornam um arquivo txt. basicamente seria isso.

eu precisaria de uma rotina de envio e recebimento de arquivos via socket, eu estou tentando fazer com o idtpcclient.


GOSTEI 0
Zumbi

Zumbi

03/10/2006

Alguém teria uma função de envio e recebimento de arquivos com o TIdTCPServer e TIdTCPClient?


GOSTEI 0
Massuda

Massuda

03/10/2006

Verifique com quem fez o servidor se a transferencia funciona assim:

* abre a conexão
* manda o arquivo
* recebe o arquivo
* fecha a conexão

Se for assim, é possível fazer com Indy.

Porque ´possível´? Indy se baseia na idéia de que quando você recebe dados, você tem idéia do tamanho dos dados ou sabe que os dados possuem alguma indicação de fim (normalmente CR/LF, mas pode ser também o fim da conexão); poderia usar algum tipo de timeout para controlar o fim da recepção, mas como se trata de um WAN, os tempos envolvidos são imprevisíveis.

Assumindo que funcione do jeito que escrevi no início...
var
  Stream: TFileStream;
...
  // falta tratamento de erros!

  Stream := TFileStream.Create(´c:\pasta\do\arquivo.de.dados´,
    fmOpenRead);

  IdTCPClient1.Host := ´ip.ou.nome.do.servidor´;
  IdTCPClient1.Port := porta.do.servidor;

  IdTCPClient1.Connect;

  IdTCPClient1.WriteStream(Stream);

  Stream.Free;

  Stream := TFileStream.Create(´c:\pasta\do\arquivo.de.resposta´,
    fmCreate);

  // vai ler até ser desconectado
  IdTCPClient1.ReadStream(Stream, -1, True);

  Stream.Free;
...
Não sei se esse código vai funcionar, os detalhes que você passou não permitem fazer mais que isso. Dependendo do funcionamento real da sua transferencia de dados, pode ser que o Indy não seja a melhor ferramenta a ser utilizada.


GOSTEI 0
Zumbi

Zumbi

03/10/2006

tem como colocar um tipo de timer para ficar verificando se o servidor está enviando um arquivo para o client? e como ficaria tem como postar um exemplo?


GOSTEI 0
Massuda

Massuda

03/10/2006

tem como colocar um tipo de timer para ficar verificando se o servidor está enviando um arquivo para o client?
Porque isso seria necessário? Eu havia entendido que você ´teria que enviar um arquivo txt, e eles me retornam um arquivo txt´; logo, você só recebe um arquivo depois de enviar um arquivo.


GOSTEI 0
POSTAR