2011-12-22 119 views
0

歡迎!FTP狀態碼響應不起作用

我對自己的應用程序有一點問題。這個應用程序可以連接(sith套接字)一個FTP服務器,它的工作正常。但我的問題是,如果用戶使用不好的用戶名或密碼,程序將不會收到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('\ N')是低效率的,因爲它涉及的額外撥款(猜爲什麼)

現在以實際爲準:我從來沒有使用過的WP7插座,但是從我瞭解的異步操作在我看來,你開始異步運算(通過調用ReceiveAsync)並在答案到達之前使用結果(statusMessage)。

想一下你的ParseHostResponse()方法的設計:

  • 壞名聲,表示響應的解析,而它實際上執行通信
  • 壞的功能:該方法指示同步組合,但內部使用異步模式。我不知道在這裏提出什麼建議,因爲每個解決方案似乎都是錯誤的。例如,等待響應將使UI不可置信。

我的主要建議是,您可以獲得有關異步編程的更多信息,然後相應地重新編程您的應用程序。