2011-12-22 2 views
0

Добро пожаловать!Ответ кода статуса FTP не работает

У меня есть небольшая проблема с собственным приложением. Это приложение может быть подключено (sith socket) к FTP-серверу, и его работа прекрасна. Но моя проблема в том, что если пользователь использует плохой usernam или пароль, программа не получит ответ statucode. Что не так? Я хотел бы использовать эту StatusCode некоторый пункт для изучения (usernem или/и пароль и т.д.) Код:

public static void ReadResponse() 
    { 
     result = ParseHostResponse(); 
     statusCode = int.Parse(result.Substring(0, 3)); 
     statusMessage = "";  
    } 

ParseHostResponse() метод содержит следующий: Код:

public static string ParseHostResponse() 
    { 
     SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs(); 
     socketEventArg.RemoteEndPoint = socket.RemoteEndPoint; 
     socketEventArg.SetBuffer(buffer, BUFFER_SIZE, 0); 

     socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e) 
     { 
      if (e.SocketError == SocketError.Success) 
      { 
       statusMessage = Encoding.UTF8.GetString(e.Buffer, e.Offset, e.BytesTransferred); 
       statusMessage = statusMessage.Trim('\0'); 
      } 
      else 
      { 
       statusMessage = e.SocketError.ToString(); 
      } 

     }); 

     socket.ReceiveAsync(socketEventArg); 

     string[] msg = statusMessage.Split('\n'); 
     if (statusMessage.Length > 2) 
     { 
      statusMessage = msg[msg.Length - 2]; 
     } 
     else 
     { 
      statusMessage = msg[0]; 
     } 

     if (!statusMessage.Substring(3, 1).Equals(" ")) 
     { 
      return ParseHostResponse(); 
     } 

     return statusMessage; 
    } 

Если Я приглашаю к методу ReadResponse(), ответ Visual Studio с этим исключением: NullReferenceException

в этом коде: Код:

. 
. 
string[] msg = statusMessage.Split('\n'); 
. 

Что случилось? Этот выпуск кода к http://msdn.microsoft.com/en-us/library/hh202858%28v=vs.92%29.aspx#BKMK_RECEIVING

Благодарим за помощь!

ответ

0

Я не могу помочь, но должен начать с этими побочными замечаниями:

  • statusMessage.Trim ('\ 0') не работает (попробуйте)
  • statusMessage.Split ('\ п ') является неэффективным, так как она включает в себя дополнительные распределения (догадайтесь почему)

Теперь к реальной теме: я никогда не использовал розетки на WP7, но от того, что я знаю об асинхронных операциях он смотрит на меня, что вы начинаете асинхронный ор (путем вызова ReceiveAsync) и использовать результат (statusMessage) до получения ответа.

Подумайте немного о вашей конструкции метода ParseHostResponse():

  • Bad Имя: Указывает парсинг ответа, в то время как на самом деле осуществляет связь
  • Bad функциональность: Метод указывает синхронизации скороговоркой, но внутренне использует асинхронный шаблон. Я не знаю, что предложить здесь, поскольку каждое решение кажется неправильным. Например, ожидание ответа сделает UI неприемлемым.

Моя основная рекомендация заключается в том, что вы получаете больше информации об асинхронном программировании, а затем перепрограммируете свое приложение соответственно.

Смежные вопросы