我正在尝试通过FTP从MOXA UC8410下载文件。我的代码不起作用。这是我的代码:
void download2()
{
Uri serverUri = new Uri("ftp://169.254.1.1/CFDisk/PCPACM/pcpacm.ini");
// The serverUri parameter should start with the ftp:// scheme.
if (serverUri.Scheme != Uri.UriSchemeFtp)
{
}
// Get the object used to communicate with the server.
WebClient request = new WebClient();
// This example assumes the FTP site uses anonymous logon.
request.Credentials = new NetworkCredential("admin", "admin");
try
{
byte[] newFileData = request.DownloadData(serverUri.ToString());
string fileString = System.Text.Encoding.UTF8.GetString(newFileData);
//Console.WriteLine(fileString);
}
catch (WebException e)
{
// Console.WriteLine(e.ToString());
MessageBox.Show(e.Response + e.Message);
}
}
我也试过这个:
void download()
{
try
{
// Get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri("ftp://169.254.1.1:21/CFDisk/PCPACM/pcpacm.ini"));
// using admin as the username and admin as the passward.
request.Credentials = new NetworkCredential("admin", "admin");
//request.KeepAlive = false;
request.Method = WebRequestMethods.Ftp.DownloadFile;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
processingfile(reader);
responseStream.Close();
reader.Close();
}
catch (Exception e2)
{
MessageBox.Show("Not connected" , e2.Message);
}
}
代码转到
Stream responseStream = response.GetResponseStream();
它停止了,它永远不会进入下一行。
输出说:
线程0x175c已退出,代码为259(0x103) 线程0x212c已退出,代码为259(0x103)。
这没有帮助。
我可以使用命令提示符ftp到MOXA UC8410,我可以使用FileZilla下载文件但不使用我的代码。 Moxa UC8410上没有防火墙,所以我的代码出了问题。
更新: UpDATE它正在工作!!!
但仅当我转到本地区域连接属性并将Internet协议版本4(tcp / IPv4)更改为
时使用以下IP地址:
IP地址:169.254.1.5
子网掩码:225.225.0.0
有谁知道为什么?有没有办法我可以修理它而不必这样做?
为什么我必须将它们放在同一个子域中?
答案 0 :(得分:0)
由于我还没有评论,我会在这里提出我的问题:
1)当您使用FileZilla登录时,是否从 CFDisk 所在的目录开始? 2)您使用的是纯文本FTP吗?使用FTP over TLS时,方法略有不同。 3)它会抛出异常吗?如果是这样,请同时向我们提供更多详细信息。
此外,WebResponse
,Stream
和StreamReader
也是一次性的。
答案 1 :(得分:0)
我在这个小型Windows窗体应用程序中创建(并在我的一个远程服务器上测试)。它似乎在这里工作正常。看看吧。
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
namespace FTPTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string localPath = @"C:\Temp\navigazione-privata.pdf";
string ftpIPAddress = "xxx.xxx.xxx.xxx";
string remoteFilepath = "/userdownloads/navigazione-privata.pdf";
string ftpPath = "ftp://" + ftpIPAddress + remoteFilepath;
using (WebClient request = new WebClient())
{
request.Credentials = new NetworkCredential("username", "password");
byte[] fileData = request.DownloadData(ftpPath);
using (FileStream file = File.Create(localPath))
{
file.Write(fileData, 0, fileData.Length);
file.Close();
}
MessageBox.Show("Requested file downloaded");
}
}
}
}