从服务器下载FTP文件出现问题

zhaoyycit 2011-08-11 04:45:48
问题如下:
System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
--- End of inner exception stack trace ---
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.FtpDataStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.IO.StreamReader.ReadBuffer()
at System.IO.StreamReader.ReadLine()

各位大虾,这会不会是服务器内存不足导致呢?代码如下


public void FTPFile()
{
int i = 0;
int k = 0;
string temp_strServer = "ftp://××××";
string temp_remoteFile = "XXX.tab";
string temp_userID = "×××";
string temp_passWord = "×××";
Uri temp_URI = new Uri(temp_strServer + temp_remoteFile);
string temp_localFilePath = Application.StartupPath + "/temp/";

try
{
currentTime = DateTime.Now;
WriteLog("---begin FTP---" + currentTime);

FtpWebRequest ftpReq = (FtpWebRequest)WebRequest.Create(temp_URI);
ftpReq.Method = WebRequestMethods.Ftp.DownloadFile;
ftpReq.UseBinary = true;
ftpReq.Credentials = new NetworkCredential(temp_userID, temp_passWord);
FtpWebResponse ftpResp = (FtpWebResponse)ftpReq.GetResponse();
StreamReader ftpRespStream = new StreamReader(ftpResp.GetResponseStream());
// Stream ftpRespStream = ftpResp.GetResponseStream();

string line = ftpRespStream.ReadLine();
while (line != null)
{
FileInfo myfileinfo = new FileInfo(temp_localFilePath + "XXX_" + i.ToString() + ".tab");
if (!myfileinfo.Exists)
{
FileStream fs = myfileinfo.Create();
fs.Close();
}
StreamWriter mysw = myfileinfo.AppendText();
mysw.WriteLine(line);
mysw.Close(); // have to be closed

k = k + 1;
if (k > 20000)
{
k = 0;
myfileinfo.MoveTo(temp_localFilePath + "XXX_" + i.ToString() + "_2.tab");
currentTime = DateTime.Now;
WriteLog("---complete one file---file No.: " + i + "----- at :" + currentTime);
i = i + 1;
}

line = ftpRespStream.ReadLine();
//if (i == 2 && k == 100) // for test
//{
// line = null;
//}
}
FileInfo myfileinfo2 = new FileInfo(temp_localFilePath + "XXX_" + i.ToString() + ".tab");
if (myfileinfo2.Exists)
{
myfileinfo2.MoveTo(temp_localFilePath + "XXX_" + i.ToString() + "_2.tab");
}
ftpResp.Close();
g_completeFTP = true;
currentTime = DateTime.Now;
WriteLog("---complete all FTP files------------file No.: " + i + "---------- at :" + currentTime);
}
catch (Exception e)
{
WriteLog(e.ToString());
g_completeFTP = true;
}
}
...全文
409 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
勇敢的心515 2013-03-11
  • 打赏
  • 举报
回复
lz,问题解决了没?我现在也碰到这个问题了,不知道是远程服务器的问题还是本机问题。
zhaoyycit 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dazhabai 的回复:]
最好能看到ftp服务器端的日志,可以清楚的看到哪条ftp指令出了问题
[/Quote]
就是因为服务器不在大陆,所以很难去查看日志。
现在只能猜测到底是什么原因导致这样的错误了。。
dazhabai 2011-08-13
  • 打赏
  • 举报
回复
最好能看到ftp服务器端的日志,可以清楚的看到哪条ftp指令出了问题
孟子E章 2011-08-12
  • 打赏
  • 举报
回复
如果文件大。你可以使用异步下载
BeginGetRequestStream

或者WebClient异步下载

参见
http://stuff.seans.com/2009/01/05/using-httpwebrequest-for-asynchronous-downloads/
zhaoyycit 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 net_lover 的回复:]
An existing connection was forcibly closed by the remote host.

远程连接被强迫关闭了,你试试使用ftp软件能否下载
[/Quote]
用ftp软件是可以下载的,这里出现的问题有点像内存溢出
孟子和子夜都来回答这个问题,太荣幸了。。
孟子E章 2011-08-12
  • 打赏
  • 举报
回复
An existing connection was forcibly closed by the remote host.

远程连接被强迫关闭了,你试试使用ftp软件能否下载
zhaoyycit 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wxr0323 的回复:]
你下载的文件有多大。。

C# code
public void Download(string filePath, string fileName)
{
FtpWebRequest reqFTP;
try
{
FileStream outpu……
[/Quote]
子夜,你好!这个文件有几百兆的大小,所以做了文件的拆分。关键是这个程序已经跑了很多个月了,最近才发现这样的问题,代码我也做过了一些优化,还是不行。这个是否跟服务器内存不足有关呢?
zhaoyycit 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 net_lover 的回复:]
如果文件大。你可以使用异步下载
BeginGetRequestStream

或者WebClient异步下载

参见
http://stuff.seans.com/2009/01/05/using-httpwebrequest-for-asynchronous-downloads/
[/Quote]
其实文件才几百兆应该不算大啊。
异步下载能有效的解决这个IO的问题吗?应该不会吧
这个问题有的时候发生,有的时候又正常。。
关键服务器还不在身边,根本无从查找问题的原因
子夜__ 2011-08-11
  • 打赏
  • 举报
回复
你下载的文件有多大。。
public void Download(string filePath, string fileName)  
{
FtpWebRequest reqFTP;
try
{
FileStream outputStream = new FileStream(filePath + "//" + fileName, FileMode.Create);
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName));
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
long cl = response.ContentLength;
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
ftpStream.Close();
outputStream.Close();
response.Close();
}
catch (Exception ex)
{
Insert_Standard_ErrorLog.Insert("FtpWeb", "Download Error --> " + ex.Message);
}
}
LMAOhuaNL 2011-08-11
  • 打赏
  • 举报
回复
各位大虾,这会不会是服务器内存不足导致呢?

这种可能性最大

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧