2011-12-22 77 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不可置信。

我的主要建议是,您可以获得有关异步编程的更多信息,然后相应地重新编程您的应用程序。