Inquiridor
Sockets

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
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
-
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 -
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. -
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