请教Ftp高手(c#、Ftp相关),这个代码有什么问题?
Port命令后放送Rete文件。
然后生成DataSocket,采用streamwriter下载文件
小文件<50K一般工作正常,当时>200k的文件往往传输过程中会
自动中断传输。提示远程主机主动断开连接。
然而再去用list命令却提示data connection in use
不知道为什么。下面的streamwrite在pasv模式下运行正常。
listener.start后产生的dataSocket还需要特别的设置吗?
public static Socket DataSocket(){
TcpListener listener = new TcpListener(dataPort);
listener.Start();
FtpFunction.dataPort+=2;
return listener.AcceptSocket();
}
public static void StreamWriter(string path,Socket dataSocket,bool resume,long filesize)
{
updown=true;
idletime=DateTime.Now.Ticks;//开始计算速度
FileStream writer=null;
if(resume) {writer=File.Open(path,FileMode.Append,FileAccess.Write);totalread=filesize;}
else {writer=File.Create(path);totalread=0;}
try
{
Thread oThread=Thread.CurrentThread;
lock(oThread)
{
byte[] buffer=new byte[1024];
int bytesread=1;
while(bytesread>0&&FtpFunction.updownstart)
{
bytesread=dataSocket.Receive(buffer,0,buffer.Length,SocketFlags.None);
writer.Write(buffer,0,bytesread);
totalread+=(long)bytesread;
}
}
}
finally
{
dataSocket.Shutdown(SocketShutdown.Both);
dataSocket.Close();
writer.Close();
updown=false;
totalftp+=totalread;
totalread=0;
}
}