none
Sockets RRS feed

  • Pergunta

  • Olá a todos!

    Eu tenho um problema...

    Estou tentando fazer dois programas (cliente e servidor) para transferir arquivos.

    O cliente deve conectar-se com o servidor e transferir um arquivo qualquer.

    Isso eu consigo fazer numa boa, só tem um problema...

    Eu preciso que o programa(cliente) me informe na tela quantos bytes já foram enviados ao servidor.

    Quando eu chamo o método Send, os dados são enviados para um buffer de saída do dotnet, mas eu não tenho nenhum controle sobre o quanto já foi transferido.

    Eu gostaria de saber se tem algum jeito de fazer isso.

    Obrigado pela atenção!


    Matheus
    quarta-feira, 21 de dezembro de 2011 04:24

Todas as Respostas

  • Bom dia Matheus,

    segue uma solução que poderá sanar sua dúvida. Repare que no método "Send" existe uma variável "sent" que armazena a quantidade de bytes enviados.

    http://www.csharp-examples.net/socket-send-receive/

    Abraços,


    Daniel Cheida de Oliveira
    • Sugerido como Resposta Daniel Cheida quarta-feira, 21 de dezembro de 2011 11:08
    • Editado Daniel Cheida quarta-feira, 21 de dezembro de 2011 11:09
    quarta-feira, 21 de dezembro de 2011 11:08
  • Olá Daniel!

    Neste exemplo o programa não conta realmente quantos bytes foram enviados...

    Quando eu chamo o método Send do socket, ele coloca todos esses bytes em um buffer na memória, e vai enviando para o servidor com o tempo. Esse exemplo apenas conta quantos bytes foram colocados no buffer, mas não diz quanto já foi verdadeiramente enviado para o servidor.

    Esse é o meu problema =/

     

    Mesmo assim obrigado!


    Matheus
    sexta-feira, 23 de dezembro de 2011 21:14
  • Boa noite, acredito que haja a possibilidade de extrair esta informação do evento de envio mesmo, ou do próprio buffer um vez que o tráfego a principio parte dele.

    No entanto, dependendo da arquitetura que você esta utilizando na aplicação, pode ser ligeiramente viavel você extrair isto do seu server.  Já pensou nesta possibilidade? como é o seu cenário? qual é a finalidade da sua aplicação? basicamente um FTP?

    Boa sorte!

    Abs.,


    Triunfo T.
    domingo, 25 de dezembro de 2011 01:59
  • Boa noite Thiago!

    Eu estou fazendo estas aplicações para gerenciar meus computadores pela internet.

    Não farei uso de nenhum protocolo conhecido, será de minha autoria.

    Uma das funcionalidades é a de transferir arquivos. Então o servidor estará sempre funcionando e esperando um comando do cliente, ou arquivo para ser transferido. Mas os arquivos podem variar entre quilo bytes e giga bytes. Não seria viável extrair a informação do servidor, pois isto congestionaria a rede.

    Quanto a extrair a informação do buffer de saída do .Net, eu ainda não consegui descobrir como fazer. O .Net não me dá controle sobre isso, nem por eventos nem por propriedades. Eu apenas utilizo o método Send do socket e ele automaticamente coloca os dados no buffer. Mas os dados não são enviados na mesma hora, eles são transferidos aos poucos.

    Abs,


    Matheus
    domingo, 25 de dezembro de 2011 06:16