rapa
Гость
|
|
« : 08-12-2005 22:18 » |
|
Народ.Я уже обращался с этой проблеммой,но возможно мне не удалось правильно объяснить ,какая загвоздка,поэтому попробую ещё раз. Я пишу программу,которая подключается к серверу "POP3" ,соответственно реализует все его базовые команды как USRE,PASS,LIST и т.д.Так же она должна проверять почту,но не посылать её. Вот так я подлучаюсь к серверу: public class POP3 { #region PRIVATE_DATA private TcpClient clientSocket; private string serverName; private int port; private string userName; private string password; private NetworkStream netStrm; private bool bIsConnected; private const string POP_STATUS_FAILURE = "-ERR"; private const string POP_STATUS_SUCCESS = "+OK"; #endregion #region POP3_CONSRACTOR public Pop3( string serverName , string userName , string password ) { this.serverName=serverName; this.userName=userName; this.password=password; this.port=110; //this.netStrm = clientSocket.GetStream(); this.Connect( serverName , userName , password ); // bIsConnected = false; } #endregion #region CONNECT method public bool Connect( string sServerName , string sUserName , string sPassword ) { try { clientSocket=new TcpClient( sServerName , port ); } catch( SystemException e ) { Console.WriteLine( "Invalid sServerName Or port" , e.Message ); Console.ReadLine(); return false; } // NetworkStream NetStrm = clientSocket.GetStream(); netStrm = clientSocket.GetStream(); //StreamReader RdStrm = new StreamReader( NetStrm ); StreamReader RdStrm = new StreamReader( netStrm ); // sendPOP3cmd( "USER "+ sUserName + " \r\n" , NetStrm ); // sendPOP3cmd( "PASS "+ sPassword+ "\r\n" , NetStrm ); sendPOP3cmd( "USER "+ sUserName + " \r\n" , netStrm ); sendPOP3cmd( "PASS "+ sPassword+ "\r\n" , netStrm ); bIsConnected = true; // Update local flag return true; } #endregion #region SEND_POP3_CMD method //public string sendPOP3cmd( string cmd , NetworkStream NetStrm ) public string sendPOP3cmd( string cmd , NetworkStream netStrm ) { byte[] szData; string returnedData = ""; //StreamReader RdStrm= new StreamReader( NetStrm ); StreamReader RdStrm= new StreamReader( netStrm ); szData = System.Text.Encoding.ASCII.GetBytes( cmd.ToCharArray() ); //NetStrm.Write( szData , 0 , szData.Length ); netStrm.Write( szData , 0 , szData.Length ); if ( cmd == "LIST\r\n" ) { returnedData = RdStrm.ReadLine(); Console.WriteLine( cmd + "\r\n" + returnedData + "\r\n" ); while ( returnedData != "." ) { returnedData = RdStrm.ReadLine(); Console.WriteLine( returnedData + "\r\n" ); } } else { returnedData = RdStrm.ReadLine(); Console.Write( cmd ); Console.WriteLine("\t" + returnedData ); } return returnedData; } #endregion #region POP3_COMMAND method //public string Pop3Command( string sCommand , NetworkStream onetStrm ) public string Pop3Command( string sCommand , NetworkStream netStrm ) { byte[] sizeData; //string returnedData = ""; StringBuilder sBuilder = new StringBuilder(""); // netStrm = clientSocket.GetStream(); //StreamReader RdStrm = new StreamReader ( onetStrm ); StreamReader RdStrm = new StreamReader ( netStrm ); sizeData = System.Text.Encoding.ASCII.GetBytes ( sCommand.ToCharArray() ); //onetStrm.Write ( sizeData , 0 , sizeData.Length ); netStrm.Write ( sizeData , 0 , sizeData.Length ); try { sBuilder.Append( RdStrm.ReadLine() ); } catch( Exception e ) { Console.WriteLine( e.Message ); } return sBuilder.ToString(); } #endregion }
А вот в чём проблемма.Есть функция Capability.Она должна возвращать данные сервера,а в часности(в моём случае) LOGIN-DELAY и EXPIRE TIME,в зависимости от stringa который я ей передаю. Проблемма в том,что когда я её запускю 2 раза подряд из maina,то первый раз она работает как надо,а во второы раз абсолютно не работает.Вот эта функция: #region CAPABILITY method public string Capabilty( string sComand) { string [] returnDataArr; string tmp = ""; //netStrm = clientSocket.GetStream(); StringBuilder returnData = new StringBuilder(); StreamReader RdStrm = new StreamReader( netStrm ); //returnData.Append( Pop3Command( "CAPA " + "\r\n " , netStrm )); returnData.Append( Pop3Command( "CAPA " + "\r\n " , netStrm )); Console.WriteLine( returnData.ToString()); if( returnData.ToString().StartsWith( "+" ) ) { returnData.Remove(0,returnData.Length); while( !returnData.ToString().EndsWith( "." ) ) { returnData.Append("\r\n"); returnData.Append( RdStrm.ReadLine()); } } returnDataArr = returnData.ToString().Split('\n'); foreach(string s in returnDataArr) { if( s.StartsWith(sComand) ) { tmp = s; break; } } tmp = tmp.Remove(0,sComand.Length+1); return tmp ; } #endregion
Про такой main я говорил: [STAThread] static void Main( string[] args ) { Pop3 temp = new Pop3("pop.mail.ru","pop3corn","12345"); Console.WriteLine( temp.Capabilty("EXPIRE")); Console.WriteLine( temp.Capabilty("LOGIN-DELAY") ); Console.ReadLine(); }
P.S. username на сервере и password настояшие.Я открыл ящик толко из-за этого. Помогите решить проблему
|