FTP状态代码响应不起作用

时间:2011-12-22 19:29:59

标签: windows-phone-7 ftp response

欢迎!

我对自己的应用程序有一点问题。这个应用程序可以连接(西斯套接字)一个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

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我无法帮助,但必须从这些旁边的评论开始:

  • statusMessage.Trim('\ 0')不起作用(试试)
  • statusMessage.Split('\ n')效率低,因为它涉及额外的分配(猜测原因)

现在谈到实际主题:我从来没有在WP7上使用套接字,但是根据我对异步操作的了解,它在我看来你启动异步操作(通过调用ReceiveAsync)并在答案到达之前使用结果(statusMessage)。

想一想你的ParseHostResponse()方法的设计:

  • 错误名称:表示在实际执行通信时解析响应
  • 功能不良:该方法表示同步模式,但内部使用异步模式。我不知道在这里建议什么,因为每个解决方案似乎都是错误的。例如,等待响应将使UI不可置信。

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