Ir para conteúdo
Fórum Script Brasil
  • 0

Exception De Io


bemidio

Pergunta

Estou com uma dificuldade com Stream. Estou trabalhando num aplicativo que captura mensagens de um servidor pop3. Ele consegue ler toda a conversa (como os envios de login e senha), mas quando precisa ler o a mensagen mesmo, ocorre um Exception, que eu não estou conseguindo resolver, mesmo aumentando o tempo para timeout. Alguém tem alguma solução? O erro acontece na última linha do trecho abaixo:

OBS: VS 2003

A mensagem do Exception é: "Unable to read data from the transport connection."

{"An existing connection was forcibly closed by the remote host" }

        
    sr.ReadLine();

                sw.WriteLine("USER " + definedUser);

                sw.Flush();

                if(sr.ReadLine().StartsWith("-ERR")) throw new ApplicationException("Login invalido");

                sw.WriteLine("PASS " + definedPassWord);

                sw.Flush();

                if(sr.ReadLine().StartsWith("-ERR")) throw new ApplicationException("Senha invalida");
                
                tcp.SendTimeout = 5000000;

                string envio = "RETR " + messageNumber;

                sw.WriteLine(envio);
                sw.Flush();
                
                string teste = sr.ReadToEnd();

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Eu fiz de um jeito diferente (utilizando um NetworkStream) e deu certo, veja:

string servidor = "pop3.servidor.com.br";
string usuário = "usuário";
string senha = "senha";
string númmensagem = "01";

textBox1.Text = "";

TcpClient tcp = new TcpClient(servidor, 110);

NetworkStream ns = tcp.GetStream();

byte[] dados = new byte[2048];
byte[] enviar;

ns.Read(dados, 0, dados.Length);
textBox1.Text += ParaString(dados);

enviar = ParaBytes("USER " + usuário + "\n");
ns.Write(enviar, 0, enviar.Length);

ns.Read(dados, 0, dados.Length);
textBox1.Text += ParaString(dados);

enviar = ParaBytes("PASS " + senha + "\n");
ns.Write(enviar, 0, enviar.Length);

ns.Read(dados, 0, dados.Length);
textBox1.Text += ParaString(dados);

enviar = ParaBytes("RETR " + númmensagem + "\n");
ns.Write(enviar, 0, enviar.Length);

do
{
    ns.Read(dados, 0, dados.Length);
    textBox1.Text += ParaString(dados);
} while (ns.DataAvailable);

ns.Close();
tcp.Close();
E você vai precisar também destas duas funções:
string ParaString(byte[] dados)
{
    return System.Text.Encoding.Default.GetString(dados, 0, dados.Length);
}

byte[] ParaBytes(string s)
{
    return System.Text.Encoding.Default.GetBytes(s);
}

Certo? ;)

Graymalkin

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...