国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > C# > 正文

C#版ftp方法實現類的代碼

2020-01-24 03:49:13
字體:
來源:轉載
供稿:網友
/* 
FTPFactory.cs 
Better view with tab space=4 
Written by Jaimon Mathew (jaimonmathew@rediffmail.com) 
Rolander,Dan (Dan.Rolander@marriott.com) has modified the 
download 
method to cope with file name with path information. He also 
provided 
the XML comments so that the library provides Intellisense 
descriptions. 
use the following line to compile 
csc /target:library /out:FTPLib.dll /r:System.DLL FTPFactory.cs 
*/ 
using System; 
using System.Threading; 
using System.Net; 
using System.IO; 
using System.Text; 
using System.Net.Sockets; 
using System.Configuration; 
namespace AudioCollect 

/// <summary> 
/// FTPFactory 的摘要說明。 
/// </summary> 
public class FTPFactory 

static readonly log4net.ILog log = log4net.LogManager.GetLogger("log4net"); 
private string 
remoteHost,remotePath,remoteUser,remotePass,mes; 
private int remotePort,bytes; 
private Socket clientSocket; 
private int retValue; 
private Boolean debug; 
private Boolean logined; 
private string reply; 
private static int BLOCK_SIZE = 512; 
Byte[] buffer = new Byte[BLOCK_SIZE]; 
Encoding ASCII = Encoding.ASCII; 
public FTPFactory() 

string FTPRemoteIP = ConfigurationSettings.AppSettings["FTPRemoteIP"]; 
int FTPRemotePort = Convert.ToInt32( ConfigurationSettings.AppSettings["FTPRemotePort"] ); 
string FTPUser = ConfigurationSettings.AppSettings["FTPUser"]; 
string FTPPassword = ConfigurationSettings.AppSettings["FTPPassword"]; 
remoteHost = FTPRemoteIP; 
remotePath = "."; 
remoteUser = FTPUser; 
remotePass = FTPPassword; 
remotePort =FTPRemotePort; 
debug = false; 
logined = false; 

/// 
/// Set the name of the FTP server to connect to. 
/// 
/// Server name 
public void setRemoteHost(string remoteHost) 

this.remoteHost = remoteHost; 

/// 
/// Return the name of the current FTP server. 
/// 
/// Server name 
public string getRemoteHost() 

return remoteHost; 

/// 
/// Set the port number to use for FTP. 
/// 
/// Port number 
public void setRemotePort(int remotePort) 

this.remotePort = remotePort; 

/// 
/// Return the current port number. 
/// 
/// Current port number 
public int getRemotePort() 

return remotePort; 

/// 
/// Set the remote directory path. 
/// 
/// The remote directory path 
public void setRemotePath(string remotePath) 

this.remotePath = remotePath; 

/// 
/// Return the current remote directory path. 
/// 
/// The current remote directory path. 
public string getRemotePath() 

return remotePath; 

/// 
/// Set the user name to use for logging into the remote server. 
/// 
/// Username 
public void setRemoteUser(string remoteUser) 

this.remoteUser = remoteUser; 

/// 
/// Set the password to user for logging into the remote server. 
/// 
/// Password 
public void setRemotePass(string remotePass) 

this.remotePass = remotePass; 

/// 
/// Return a string array containing the remote directory's file list. 
/// 
/// 
/// 
public string[] getFileList(string mask) 

if(!logined) 

login(); 

Socket cSocket = createDataSocket(); 
sendCommand("NLST " + mask); 
if(!(retValue == 150 || retValue == 125)) 

throw new IOException(reply.Substring(4)); 

mes = ""; 
Thread.Sleep(700); 
while(true) 

if(cSocket.Connected) 

int bytes = cSocket.Receive(buffer, buffer.Length, 0); 
mes += ASCII.GetString(buffer, 0, bytes); 
if(bytes < buffer.Length) 

break; 


else 

log.Info("socket 連接斷了!"); 


log.Info(mes); 
char[] seperator = {'/n'}; 
string[] mess = mes.Split(seperator); 
foreach(string fileName in mess) 

log.Info(fileName); 

cSocket.Close(); 
readReply(); 
if(retValue != 226) 

throw new IOException(reply.Substring(4)); 

return mess; 

public string[] getFileList() 

if(!logined) 

login(); 

Socket cSocket = createDataSocket(); 
sendCommand("LIST "); 
if(!(retValue == 150 || retValue == 125)) 

throw new IOException(reply.Substring(4)); 

mes = ""; 
while(true) 

int bytes = cSocket.Receive(buffer, buffer.Length, 0); 
mes += ASCII.GetString(buffer, 0, bytes); 
if(bytes < buffer.Length) 

break; 


log.Info(mes); 
char[] seperator = {'/n'}; 
string[] mess = mes.Split(seperator); 
cSocket.Close(); 
readReply(); 
if(retValue != 226) 

throw new IOException(reply.Substring(4)); 

return mess; 

/// 
/// Return the size of a file. 
/// 
/// 
/// 
public long getFileSize(string fileName) 

if(!logined) 

login(); 

sendCommand("SIZE " + fileName); 
long size=0; 
if(retValue == 213) 

size = Int64.Parse(reply.Substring(4)); 

else 

throw new IOException(reply.Substring(4)); 

return size; 

/// 
/// Login to the remote server. 
/// 
public void login() 

clientSocket = new 
Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); 
IPEndPoint ep = new 
IPEndPoint(Dns.Resolve(remoteHost).AddressList[0], remotePort); 
try 

clientSocket.Connect(ep); 

catch(Exception) 

throw new IOException("Couldn't connect to remote server"); 

readReply(); 
if(retValue != 220) 

close(); 
throw new IOException(reply.Substring(4)); 

if(debug) 
Console.WriteLine("USER "+remoteUser); 
sendCommand("USER "+remoteUser); 
if( !(retValue == 331 || retValue == 230) ) 

cleanup(); 
throw new IOException(reply.Substring(4)); 

if( retValue != 230 ) 

if(debug) 
Console.WriteLine("PASS xxx"); 
sendCommand("PASS "+remotePass); 
if( !(retValue == 230 || retValue == 202) ) 

cleanup(); 
throw new IOException(reply.Substring(4)); 


logined = true; 
Console.WriteLine("Connected to "+remoteHost); 
chdir(remotePath); 

/// 
/// If the value of mode is true, set binary mode for downloads. 
/// Else, set Ascii mode. 
/// 
/// 
public void setBinaryMode(Boolean mode) 

if(mode) 

sendCommand("TYPE I"); 

else 

sendCommand("TYPE A"); 

if (retValue != 200) 

throw new IOException(reply.Substring(4)); 


/// 
/// Download a file to the Assembly's local directory, 
/// keeping the same file name. 
/// 
/// 
public void download(string remFileName) 

download(remFileName,"",false); 

/// 
/// Download a remote file to the Assembly's local directory, 
/// keeping the same file name, and set the resume flag. 
/// 
/// 
/// 
public void download(string remFileName,Boolean resume) 

download(remFileName,"",resume); 

/// 
/// Download a remote file to a local file name which can include 
/// a path. The local file name will be created or overwritten, 
/// but the path must exist. 
/// 
/// 
/// 
public void download(string remFileName,string locFileName) 

download(remFileName,locFileName,false); 

/// 
/// Download a remote file to a local file name which can include 
/// a path, and set the resume flag. The local file name will be 
/// created or overwritten, but the path must exist. 
/// 
/// 
/// 
/// 
public void download(string remFileName,string 
locFileName,Boolean resume) 

if(!logined) 

login(); 

setBinaryMode(false); 
Console.WriteLine("Downloading file "+remFileName+" from "+remoteHost + "http://"+remotePath); 
if (locFileName.Equals("")) 

locFileName = remFileName; 

if(!File.Exists(locFileName)) 

Stream st = File.Create(locFileName); 
st.Close(); 

FileStream output = new 
FileStream(locFileName,FileMode.Create); 
Socket cSocket = createDataSocket(); 
long offset = 0; 
if(resume) 

offset = output.Length; 
if(offset > 0 ) 

setBinaryMode(false); 
sendCommand("REST "+offset); 
if(retValue != 350) 

//throw new IOException(reply.Substring(4)); 
//Some servers may not support resuming. 
offset = 0; 


if(offset > 0) 

if(debug) 

Console.WriteLine("seeking to " + offset); 

long npos = output.Seek(offset,SeekOrigin.Begin); 
Console.WriteLine("new pos="+npos); 


sendCommand("RETR " + remFileName); 
if(!(retValue == 150 || retValue == 125)) 

throw new IOException(reply.Substring(4)); 

while(true) 

bytes = cSocket.Receive(buffer, buffer.Length, 0); 
output.Write(buffer,0,bytes); 
if(bytes <= 0) 

break; 


output.Close(); 
if (cSocket.Connected) 

cSocket.Close(); 

Console.WriteLine(""); 
readReply(); 
if( !(retValue == 226 || retValue == 250) ) 

throw new IOException(reply.Substring(4)); 


/// 
/// Upload a file. 
/// 
/// 
public void upload(string fileName) 

upload(fileName,false); 

/// 
/// Upload a file and set the resume flag. 
/// 
/// 
/// 
public void upload(string fileName,Boolean resume) 

if(!logined) 

login(); 

Socket cSocket = createDataSocket(); 
long offset=0; 
if(resume) 

try 

setBinaryMode(true); 
offset = getFileSize(fileName); 

catch(Exception) 

offset = 0; 


if(offset > 0 ) 

sendCommand("REST " + offset); 
if(retValue != 350) 

//throw new IOException(reply.Substring(4)); 
//Remote server may not support resuming. 
offset = 0; 


/*==========================*/ 
sendCommand("STOR "+Path.GetFileName(fileName)); 
if( !(retValue == 125 || retValue == 150) ) 

throw new IOException(reply.Substring(4)); 

// open input stream to read source file 
FileStream input = new FileStream(fileName,FileMode.Open); 
if(offset != 0) 

if(debug) 

Console.WriteLine("seeking to " + offset); 

input.Seek(offset,SeekOrigin.Begin); 

Console.WriteLine("Uploading file "+fileName+" to "+remotePath); 
while ((bytes = input.Read(buffer,0,buffer.Length)) > 0) 

cSocket.Send(buffer, bytes, 0); 

input.Close(); 
Console.WriteLine(""); 
if (cSocket.Connected) 

cSocket.Close(); 

readReply(); 
if( !(retValue == 226 || retValue == 250) ) 

throw new IOException(reply.Substring(4)); 


/// 
/// Delete a file from the remote FTP server. 
/// 
/// 
public void deleteRemoteFile(string fileName) 

if(!logined) 

login(); 

sendCommand("DELE "+fileName); 
if(retValue != 250) 

throw new IOException(reply.Substring(4)); 


/// 
/// Rename a file on the remote FTP server. 
/// 
/// 
/// 
public void renameRemoteFile(string oldFileName,string 
newFileName) 

if(!logined) 

login(); 

sendCommand("RNFR "+oldFileName); 
if(retValue != 350) 

throw new IOException(reply.Substring(4)); 

// known problem 
// rnto will not take care of existing file. 
// i.e. It will overwrite if newFileName exist 
sendCommand("RNTO "+newFileName); 
if(retValue != 250) 

throw new IOException(reply.Substring(4)); 


/// 
/// Create a directory on the remote FTP server. 
/// 
/// 
public void mkdir(string dirName) 

if(!logined) 

login(); 

sendCommand("MKD "+dirName); 
if(retValue != 250) 

throw new IOException(reply.Substring(4)); 


/// 
/// Delete a directory on the remote FTP server. 
/// 
/// 
public void rmdir(string dirName) 

if(!logined) 

login(); 

sendCommand("RMD "+dirName); 
if(retValue != 250) 

throw new IOException(reply.Substring(4)); 


/// 
/// Change the current working directory on the remote FTP server. 
/// 
/// 
public void chdir(string dirName) 

if(dirName.Equals(".")) 

return; 

if(!logined) 

login(); 

sendCommand("CWD "+dirName); 
if(retValue != 250) 

throw new IOException(reply.Substring(4)); 

this.remotePath = dirName; 
Console.WriteLine("Current directory is "+remotePath); 

/// 
/// Close the FTP connection. 
/// 
public void close() 

if( clientSocket != null ) 

sendCommand("QUIT"); 

cleanup(); 
Console.WriteLine("Closing..."); 

/// 
/// Set debug mode. 
/// 
/// 
public void setDebug(Boolean debug) 

this.debug = debug; 

private void readReply() 

mes = ""; 
reply = readLine(); 
retValue = Int32.Parse(reply.Substring(0,3)); 

private void cleanup() 

if(clientSocket!=null) 

clientSocket.Close(); 
clientSocket = null; 

logined = false; 

private string readLine() 

while(true) 

bytes = clientSocket.Receive(buffer, buffer.Length, 0); 
mes += ASCII.GetString(buffer, 0, bytes); 
if(bytes < buffer.Length) 

break; 


char[] seperator = {'/n'}; 
string[] mess = mes.Split(seperator); 
if(mes.Length > 2) 

mes = mess[mess.Length-2]; 

else 

mes = mess[0]; 

if(!mes.Substring(3,1).Equals(" ")) 

return readLine(); 

if(debug) 

for(int k=0;k < mess.Length-1;k++) 

Console.WriteLine(mess[k]); 


return mes; 

private void sendCommand(String command) 

Byte[] cmdBytes = 
Encoding.ASCII.GetBytes((command+"/r/n").ToCharArray()); 
clientSocket.Send(cmdBytes, cmdBytes.Length, 0); 
readReply(); 

private Socket createDataSocket() 

sendCommand("PASV"); 
if(retValue != 227) 

throw new IOException(reply.Substring(4)); 

int index1 = reply.IndexOf('('); 
int index2 = reply.IndexOf(')'); 
string ipData = 
reply.Substring(index1+1,index2-index1-1); 
int[] parts = new int[6]; 
int len = ipData.Length; 
int partCount = 0; 
string buf=""; 
for (int i = 0; i < len && partCount <= 6; i++) 

char ch = Char.Parse(ipData.Substring(i,1)); 
if (Char.IsDigit(ch)) 
buf+=ch; 
else if (ch != ',') 

throw new IOException("Malformed PASV reply: " + 
reply); 

if (ch == ',' || i+1 == len) 

try 

parts[partCount++] = Int32.Parse(buf); 
buf=""; 

catch (Exception) 

throw new IOException("Malformed PASV reply: " + 
reply); 



string ipAddress = parts[0] + "."+ parts[1]+ "." + 
parts[2] + "." + parts[3]; 
int port = (parts[4] << 8) + parts[5]; 
Socket s = new 
Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); 
s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 5000); 
IPEndPoint ep = new 
IPEndPoint(Dns.Resolve(ipAddress).AddressList[0], port); 
try 

s.Connect(ep); 

catch(Exception) 

    throw new IOException("Can't connect to remote server"); 

return s; 



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
永久av在线| 精品国产白色丝袜高跟鞋| 精品伦理一区二区| 国产二区三区在线| 国产在线视频网站| 尤物视频网站在线观看| 国产91大片| 二区中文字幕| 黄色免费av| 国产在线麻豆精品| 最好看更新中文字幕| 国产天堂资源| 亚洲精品影视在线| 欧美精品另类| 国产三级av在线| 爱福利在线视频| 国产欧美日韩精品综合| 亚洲综合在线不卡| 豆国产97在线|亚洲| 国产欧美日韩精品综合| 性网站在线播放| 国产精品自拍亚洲| 国产超碰97| 午夜视频在线看| 在线国产1区| 国产一区精品| 色悠久久久久综合网小说| 中文字幕网在线| 超碰在线97国产| 在线āv视频| 国产成人va亚洲电影| 九九热在线免费视频| 尤物在线精品视频| 国产网红在线观看| 黄色av网址在线免费观看| 99久久99久久免费精品小说| 国产一二三四| 精品国产二区三区| 国产极品视频| www.毛片| av在线免费播放网站| 91在线看片| 国产精品美女一区二区三区四区| 国产在线观看a视频| 牛牛精品视频在线| 久久国产情侣| 开心婷婷激情| 国产在线拍揄自揄拍视频| 精品麻豆一区二区三区| 国产黄色片中文字幕| 国产三级免费观看| 国产激情小视频在线| 国产精品免费视频一区一| 国产精品久久久久久精| 国产在线观看18| 久久五月精品中文字幕 | 狠狠操视频网| 久久久久久久久久久久网站| 黄网址在线播放免费| 国产一级片麻豆| 国产激情小视频在线| 亚洲视频手机在线观看| 欧美性猛交p30| 久久精品免视着国产成人| 六月天色婷婷| 国产一级网站视频在线| 国产精品区一区二| 9999在线视频| 另类专区欧美| 国产激情网址| 美女免费视频黄| 国产一卡2卡3卡四卡网站| 91九色在线看| 亚洲国产日韩在线人成电影| 免费三级毛片| 国产高清视频在线观看| xxxxx中文字幕| 国产精品免费视频一区一| 青青草中文字幕| 国产高清一区二区三区视频| 爱福利在线视频| 国产精品jvid在线观看| 欧美成人精品福利网站| 国产福利在线| 国产精选在线观看| 欧美另类在线视频| 在线成人综合色一区| 国产黄色免费在线观看| 丁香综合五月| 免费午夜一级| 国产精品ⅴa有声小说| 九九视频在线播放| 亚洲永久免费网站| 在线亚洲精品自拍| 国产高清免费视频| 国产日本在线观看| 国产秒拍福利视频露脸| 精精国产xxxx视频在线动漫 | 国产69精品久久久久孕妇国产69久久 | 九色精品视频在线观看| 91社区在线观看| 国产porny蝌蚪视频| 国产欧美久久久久久久久| 九九热在线观看视频| 欧美性xxxx交| 丁香综合在线| 另类专区欧美| 天堂在线看视频| 尤物在线网址| 激情丁香婷婷| 激情综合丁香| 国产免费视频| 1区2区3区在线| 伊人影院在线视频| jizz一区二区三区| 免费在线看v| 日本中文字幕在线2020| 国产黄色大片在线观看| 中文在线视频观看| 黄色av网址在线免费观看| 国产性色视频| 在线天堂av| 黄色毛片在线| 伊人福利在线| 天堂在线看视频| 国产成人精品实拍在线| www.综合网.com| 国产香蕉视频在线观看| 99在线视频观看| 九九精品视频在线观看九九| 国产欧美日韩第一页| 亚洲综合色视频在线观看| 国产卡二和卡三的视频| 亚洲一区免费在线| 国产秀色在线www免费观看| av在线免费观看网| 国产一级大片| 欧洲一区av| 2021av天天| 2018av男人天堂| 女同一区二区免费aⅴ| 国产高清视频在线播放| 国产免费人人看| 本道综合精品| 亚洲电影视频在线| 国产高清在线观看| 午夜免费福利在线观看| 青青久草在线| 一本大道五月香蕉| 中文乱码字幕av网站| 国产偷倩在线播放| 国产美女自拍视频| 日本天堂影院在线视频| av免费在线观看网站| 国产天堂在线| 国产区在线视频| 国产三级在线免费观看| 91福利在线免费| 中文字幕专区| 中文字幕视频在线免费| 综合激情亚洲| 国产人成精品| 91精选福利| 日本在线免费中文字幕| 免费三级毛片| 狠狠色综合久久婷婷| 亚洲精品天堂在线观看| 在线播放黄色网址| 日本动漫同人动漫在线观看| 香蕉视频在线看| 免费视频二区| 最近中文av字幕在线中文| 国产午夜在线观看| 精品176二区| 天天插天天操| 国产免费永久在线观看| 国产精品入口麻豆免费看| 99热99re6国产在线播放| www.操操| 国产精品蜜臀| 免费看ww视频网站入口| 久久精品视频观看| 国产高清在线观看| 日本电影在线观看| 国产二区在线播放| 激情视频国产| 97在线免费| 五月天丁香在线| 日本aⅴ写真网站免费| 国产情侣高潮对白| 日本不卡1区2区3区| 国产精品一区二区婷婷| 精品久久av| 国产精品一区二区三区高清在线| 国产精品久久久久白浆| 免费在线播放av| 精品电影在线| 国产污视频在线| 高清av中文在线字幕观看1| 99热免费观看|