如何通过StreamSocket发送FTP命令(winRT)

时间:2015-03-03 16:22:24

标签: c# windows-runtime windows-phone-8.1 stream-socket-client

我想从Windows Phone 8.1连接到我的filezilla ftp服务器。

我现在有这个代码:

StreamSocket s = new StreamSocket();
await s.ConnectAsync(new HostName("192.168.254.53"), "21");
DataWriter writer = new DataWriter(s.OutputStream);
byte[] data = GetBytes(string.Format("{0}\r\n", "USER test"));
writer.WriteBytes(data);
await writer.StoreAsync();
await writer.FlushAsync();
...
static byte[] GetBytes(string str)
{
    byte[] bytes = new byte[str.Length * sizeof(char)];
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
    return bytes;
}

ConnectAsync正常运行:

(000013)03/03/2015 17:14:13 - (not logged in) (192.168.254.53)> Connected on port 21, sending welcome message...
(000013)03/03/2015 17:14:13 - (not logged in) (192.168.254.53)> 220-FileZilla Server version 0.9.49 beta
(000013)03/03/2015 17:14:13 - (not logged in) (192.168.254.53)> 220-written by Tim Kosse (tim.kosse@filezilla-project.org)
(000013)03/03/2015 17:14:13 - (not logged in) (192.168.254.53)> 220 Please visit https://filezilla-project.org/

但对于user命令,这是服务器收到的内容:

(000013)03/03/2015 17:14:13 - (not logged in) (192.168.254.53)> U
(000013)03/03/2015 17:14:13 - (not logged in) (192.168.254.53)> 500 Syntax error, command unrecognized.
(000013)03/03/2015 17:14:13 - (not logged in) (192.168.254.53)> S
(000013)03/03/2015 17:14:13 - (not logged in) (192.168.254.53)> 500 Syntax error, command unrecognized.
(000013)03/03/2015 17:14:13 - (not logged in) (192.168.254.53)> E
(000013)03/03/2015 17:14:13 - (not logged in) (192.168.254.53)> 500 Syntax error, command unrecognized.
(000013)03/03/2015 17:14:13 - (not logged in) (192.168.254.53)> R
(000013)03/03/2015 17:14:13 - (not logged in) (192.168.254.53)> 500 Syntax error, command unrecognized.
(000013)03/03/2015 17:14:13 - (not logged in) (192.168.254.53)>  

我是否正确地写入了我的OutputStream?

1 个答案:

答案 0 :(得分:0)

我现在正在使用它:

byte[] data = Encoding.Unicode.GetBytes("USER ippon\r");

在调试期间,我注意到了这一点:

enter image description here

Encoding.Unicode.GetBytes函数在每隔一个字节后添加一个0字节。这就是为什么它不起作用! 我的代码现在:

StreamSocket s = new StreamSocket();
await s.ConnectAsync(new HostName("192.168.254.53"), "21");
byte[] data = Encoding.Unicode.GetBytes("USER ippon\r");
data = data.Where(val => val != 0).ToArray();
await s.OutputStream.WriteAsync(data.AsBuffer());
await s.OutputStream.FlushAsync();