| 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 настояшие.Я открыл ящик толко из-за этого.
 Помогите решить проблему
 
 |