當前位置:首頁 » 文件傳輸 » ftp下載時間如何計算
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

ftp下載時間如何計算

發布時間: 2023-07-06 00:15:17

『壹』 關於如何實現FTP上傳或者下載帶進度和速率的實現方法

在這里需要說明的是,該方式是通過其他代碼進行改進的。 首先我們需要定義一個委託,用來實現傳輸過程中傳遞文件的總數,已完成的位元組數和速度,方便客戶端界面上調用。 public delegate void TransferProcess(long total,long finished,double speed); 調用代碼就不舉例了 接下來我們建立一個FTPClient類,該類基於socket和FTP協議實現了連接FTP服務,建立目錄,上傳文件,下載文件等主要方法。結構如下: 需要注意的是,我們需要定一個事件event TransferProcess OnTransferProcess;該事件在實例化FTPClient之後需要調用,這個事件對實現進度條和速率是非常重要的。為了實現速率我們還需要定義個公開的成員startTime(開始時間)。我們現在主要是看一下如何上傳的。 /// /// 上傳一個文件 /// /// 本地文件名 public void Put(string strFileName) { //連接伺服器 if (!bConnected) { Connect(); } UpdateStatus = true; //建立socket連接 Socket socketData = CreateDataSocket(); //向FTP伺服器發生存儲命令 SendCommand("STOR " + Path.GetFileName(strFileName)); //如何伺服器返回的信息不是我們所需要的,就拋出異常 if (!(iReplyCode == 125 || iReplyCode == 150)) { throw new IOException(strReply.Substring(4)); } //建立本地文件的數據流 FileStream input = new FileStream(strFileName, FileMode.Open); int iBytes = 0; long total = input.Length;//該成員主要記錄文件的總位元組數,注意這里使用長整型,是為了突破只能傳輸2G左右的文件的限制 long finished = 0;//該成員主要記錄已經傳輸完成的位元組數,注意這里使用長整型,是為了突破只能傳輸2G左右的文件的限制 double speed = 0;//記錄傳輸的速率 while ((iBytes = input.Read(buffer, 0, buffer.Length)) > 0)//循環從本地數據流中讀取數據到緩沖區 { //Console.WriteLine(startTime.ToString()); socketData.Send(buffer, iBytes, 0);//將緩沖區的數據發送到FTP伺服器 DateTime endTime = DateTime.Now;//每次發送數據的結束時間 TimeSpan ts = endTime - startTime;//計算每次發送數據的時間間隔 finished += iBytes;//計算完成的位元組數. Console.WriteLine(ts.Milliseconds); //計算速率,注意finished是位元組,所以需要換算沖K位元組 if (ts.Milliseconds > 0) { speed = (double)(finished / ts.TotalMilliseconds); speed = Math.Round(speed * 1000 / 1024, 2); } //這里是必不可少的,否則你無法實現進度條 //如果傳輸進度事件被實例化,而且從本地數據流中讀取數據不是空的並完成的位元組數也不為空的話,則實現委託. if (OnTransferProcess != null&&iBytes>0&&finished>0) { OnTransferProcess(total, finished,speed); } } UpdateStatus = false; finished = 0; input.Close();//當傳輸完成之後需要關閉數據流,以便下次訪問. if (socketData.Connected) { socketData.Close();//關閉當前的socket } if (!(iReplyCode == 226 || iReplyCode == 250)) { ReadReply(); if (!(iReplyCode == 226 || iReplyCode == 250)) { UpdateStatus = false; throw new IOException(strReply.Substring(4)); } } } 上面代碼中注釋寫得比較詳細,這里就不再一一講解了,關於下載中實現進度條和速率的問題可以參考以上代碼進行修改. 完整的代碼如下: using System; using System.net; using System.IO; using System.Text; using System.net.Sockets; namespace MMSEncoder { public delegate void TransferProcess(long total,long finished,double speed); /// /// FTP Client /// public class FTPClient { public event TransferProcess OnTransferProcess; public bool UpdateStatus = true; public DateTime startTime; private bool IsAbortConnect = false; #region 構造函數 /// /// 預設構造函數 /// public FTPClient() { strRemoteHost = ""; strRemotePath = ""; strRemoteUser = ""; strRemotePass = ""; strRemotePort = 21; bConnected = false; } /// /// 構造函數 /// /// FTP伺服器IP地址 /// 當前伺服器目錄 /// 登錄用戶賬號 /// 登錄用戶密碼 /// FTP伺服器埠 public FTPClient(string remoteHost, string remotePath, string remoteUser, string remotePass, int remotePort) { strRemoteHost = remoteHost; strRemotePath = remotePath; strRemoteUser = remoteUser; strRemotePass = remotePass; strRemotePort = remotePort; Connect(); } #endregion #region 登陸欄位、屬性 /// /// FTP伺服器IP地址 /// private string strRemoteHost; public string RemoteHost { get { return strRemoteHost; } set { strRemoteHost = value; } } /// /// FTP伺服器埠 /// private int strRemotePort; public int RemotePort { get { return strRemotePort; } set { strRemotePort = value; } } /// /// 當前伺服器目錄 /// private string strRemotePath; public string RemotePath { get { return strRemotePath; } set { strRemotePath = value; } } /// /// 登錄用戶賬號 /// private string strRemoteUser; public string RemoteUser { set { strRemoteUser = value; } } /// /// 用戶登錄密碼 /// private string strRemotePass; public string RemotePass { set { strRemotePass = value; } } /// /// 是否登錄 /// private Boolean bConnected; public bool Connected { get { return bConnected; } } #endregion #region 鏈接 /// /// 建立連接 /// public void Connect() { //if (IsAbortConnect) throw new IOException("用戶強制終止了FTP"); socketControl = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint ep = new IPEndPoint(IPAddress.Parse(RemoteHost), strRemotePort); // 鏈接 try { socketControl.Connect(ep); } catch (Exception) { throw new IOException("無法連接到遠程伺服器!"); } // 獲取應答碼 ReadReply(); if (iReplyCode != 220) { DisConnect(); throw new IOException(strReply.Substring(4)); } // 登陸 SendCommand("USER " + strRemoteUser); if (!(iReplyCode == 331 || iReplyCode == 230)) { CloseSocketConnect();//關閉連接 throw new IOException(strReply.Substring(4)); } if (iReplyCode != 230) { SendCommand("PASS " + strRemotePass); if (!(iReplyCode == 230 || iReplyCode == 202)) { CloseSocketConnect();//關閉連接 throw new IOException(strReply.Substring(4)); } } bConnected = true; // 切換到初始目錄 if (!string.IsNullOrEmpty(strRemotePath)) { ChDir(strRemotePath); } } /// /// 關閉連接 /// public void DisConnect() { if (socketControl != null) { SendCommand("QUIT"); } CloseSocketConnect(); } public void AbortConnect() { if (socketControl != null) { SendCommand("ABOR"); } IsAbortConnect = true; //CloseSocketConnect(); } #endregion #region 傳輸模式 /// /// 傳輸模式:二進制類型、ASCII類型 /// public enum TransferType { Binary, ASCII }; /// /// 設置傳輸模式 /// /// 傳輸模式 public void SetTransferType(TransferType ttType) { if (ttType == TransferType.Binary) { SendCommand("TYPE I");//binary類型傳輸 } else { SendCommand("TYPE A");//ASCII類型傳輸 } if (iReplyCode != 200) { throw new IOException(strReply.Substring(4)); } else { trType = ttType; } } /// /// 獲得傳輸模式 /// /// 傳輸模式 public TransferType GetTransferType() { return trType; } #endregion #region 文件操作 /// /// 獲得文件列表 /// /// 文件名的匹配字元串 /// public string[] Dir(string strMask) { // 建立鏈接 if (!bConnected) { Connect(); } //建立進行數據連接的socket Socket socketData = CreateDataSocket(); //傳送命令 SendCommand("NLST " + strMask); //分析應答代碼 if (!(iReplyCode == 150 || iReplyCode == 125 || iReplyCode == 226)) { throw new IOException(strReply.Substring(4)); } //獲得結果 strMsg = ""; while (true) { int iBytes = socketData.Receive(buffer, buffer.Length, 0); strMsg += GB2312.GetString(buffer, 0, iBytes); if (iBytes < buffer.Length) { break; } } char[] seperator = { '\n' }; string[] strsFileList = strMsg.Split(seperator); socketData.Close();//數據socket關閉時也會有返回碼 if (iReplyCode != 226) { ReadReply(); if (iReplyCode != 226) { throw new IOException(strReply.Substring(4)); } } return strsFileList; } /// /// 獲取文件大小 /// /// 文件名 /// 文件大小 public long GetFileSize(string strFileName) { if (!bConnected) { Connect(); } SendCommand("SIZE " + Path.GetFileName(strFileName)); long lSize = 0; if (iReplyCode == 213) { lSize = Int64.Parse(strReply.Substring(4)); } else { throw new IOException(strReply.Substring(4)); } return lSize; } /// /// 刪除 /// /// 待刪除文件名 public void Delete(string strFileName) { if (!bConnected) { Connect(); } SendCommand("DELE " + strFileName); if (iReplyCode != 250) { throw new IOException(strReply.Substring(4)); } } /// /// 重命名(如果新文件名與已有文件重名,將覆蓋已有文件) /// /// 舊文件名 /// 新文件名 public void Rename(string strOldFileName, string strNewFileName) { if (!bConnected) { Connect(); } SendCommand("RNFR " + strOldFileName); if (iReplyCode != 350) { throw new IOException(strReply.Substring(4)); } // 如果新文件名與原有文件重名,將覆蓋原有文件 SendCommand("RNTO " + strNewFileName); if (iReplyCode != 250) { throw new IOException(strReply.Substring(4)); } } #endregion #region 上傳和下載 /// /// 下載一批文件 /// /// 文件名的匹配字元串 /// 本地目錄(不得以\結束) public void Get(string strFileNameMask, string strFolder) { if (!bConnected) { Connect(); } string[] strFiles = Dir(strFileNameMask); foreach (string strFile in strFiles) { if (!strFile.Equals(""))//一般來說strFiles的最後一個元素可能是空字元串 { if (strFile.LastIndexOf(".") > -1) { Get(strFile.Replace("\r", ""), strFolder, strFile.Replace("\r", "")); } } } } /// /// 下載一個文件 /// /// 要下載的文件名 /// 本地目錄(不得以\結束) /// 保存在本地時的文件名 public void Get(string strRemoteFileName, string strFolder, string strLocalFileName) { if (!bConnected) { Connect(); } SetTransferType(TransferType.Binary); if (strLocalFileName.Equals("")) { strLocalFileName = strRemoteFileName; } if (!File.Exists(strLocalFileName)) { Stream st = File.Create(strLocalFileName); st.Close(); } FileStream output = new FileStream(strFolder + "\\" + strLocalFileName, FileMode.Create); Socket socketData = CreateDataSocket(); SendCommand("RETR " + strRemoteFileName); if (!(iReplyCode == 150 || iReplyCode == 125 || iReplyCode == 226 || iReplyCode == 250)) { throw new IOException(strReply.Substring(4)); } while (true) { int iBytes = socketData.Receive(buffer, buffer.Length, 0); output.Write(buffer, 0, iBytes); if (iBytes <= 0) { break; } } output.Close(); if (socketData.Connected) { socketData.Close(); } if (!(iReplyCode == 226 || iReplyCode == 250)) { ReadReply(); if (!(iReplyCode == 226 || iReplyCode == 250)) { throw new IOException(strReply.Substring(4)); } } } /// /// 上傳一批文件 /// /// 本地目錄(不得以\結束) /// 文件名匹配字元(可以包含*和?) public void Put(string strFolder, string strFileNameMask) { string[] strFiles = Directory.GetFiles(strFolder, strFileNameMask); foreach (string strFile in strFiles) { //strFile是完整的文件名(包含路徑) Put(strFile); } } /// /// 上傳一個文件 /// /// 本地文件名 public void Put(string strFileName) { if (!bConnected) { Connect(); } UpdateStatus = true; Socket socketData = CreateDataSocket(); SendCommand("STOR " + Path.GetFileName(strFileName)); if (!(iReplyCode == 125 || iReplyCode == 150)) { throw new IOException(strReply.Substring(4)); } FileStream input = new FileStream(strFileName, FileMode.Open); int iBytes = 0; long total = input.Length; long finished = 0; //DateTime startTime = DateTime.Now; double speed = 0; while ((iBytes = input.Read(buffer, 0, buffer.Length)) > 0) { Console.WriteLine(startTime.ToString()); socketData.Send(buffer, iBytes, 0); DateTime endTime = DateTime.Now; TimeSpan ts = endTime - startTime; finished += iBytes; Console.WriteLine(ts.Milliseconds); if (ts.Milliseconds > 0) { speed = (double)(finished / ts.TotalMilliseconds); speed = Math.Round(speed * 1000 / 1024, 2); } if (OnTransferProcess != null&&iBytes>0&&finished>0) { OnTransferProcess(total, finished,speed); } } UpdateStatus = false; finished = 0; input.Close(); if (socketData.Connected) { socketData.Close(); } if (!(iReplyCode == 226 || iReplyCode == 250)) { ReadReply(); if (!(iReplyCode == 226 || iReplyCode == 250)) { UpdateStatus = false; throw new IOException(strReply.Substring(4)); } } } #endregion #region 目錄操作 /// /// 創建目錄 /// /// 目錄名 public void MkDir(string strDirName) { if (!bConnected) { Connect(); } SendCommand("MKD " + strDirName); if (iReplyCode != 257) { throw new IOException(strReply.Substring(4)); } } /// /// 刪除目錄 /// /// 目錄名 public void RmDir(string strDirName) { if (!bConnected) { Connect(); } SendCommand("RMD " + strDirName); if (iReplyCode != 250) { throw new IOException(strReply.Substring(4)); } } /// /// 改變目錄 /// /// 新的工作目錄名 public void ChDir(string strDirName) { if (strDirName.Equals(".") || strDirName.Equals("")) { return; } if (!bConnected) { Connect(); } SendCommand("CWD " + strDirName); if (iReplyCode != 250) { throw new IOException(strReply.Substring(4)); } this.strRemotePath = strDirName; } #endregion #region 內部變數 /// /// 伺服器返回的應答信息(包含應答碼) /// private string strMsg; /// /// 伺服器返回的應答信息(包含應答碼) /// private string strReply; /// /// 伺服器返回的應答碼 /// private int iReplyCode; /// /// 進行控制連接的socket /// private Socket socketControl; /// /// 傳輸模式 /// private TransferType trType; /// /// 接收和發送數據的緩沖區 /// private static int BLOCK_SIZE = Int16.MaxValue; Byte[] buffer = new Byte[BLOCK_SIZE]; /// /// 編碼方式(為防止出現中文亂碼採用 GB2312編碼方式) /// Encoding GB2312 = Encoding.Default ;//Encoding.GetEncoding("gb2312"); #endregion #region 內部函數 /// /// 將一行應答字元串記錄在strReply和strMsg /// 應答碼記錄在iReplyCode /// private void ReadReply() { strMsg = ""; strReply = ReadLine(); iReplyCode = Int32.Parse(strReply.Substring(0, 3)); } /// /// 建立進行數據連接的socket /// /// 數據連接socket private Socket CreateDataSocket() { SendCommand("PASV"); if (iReplyCode != 227) { throw new IOException(strReply.Substring(4)); } int index1 = strReply.IndexOf('('); int index2 = strReply.IndexOf(')'); string ipData = strReply.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 strReply: " + strReply); } if (ch == ',' || i + 1 == len) { try { parts[partCount++] = Int32.Parse(buf); buf = ""; } catch (Exception) { throw new IOException("Malformed PASV strReply: " + strReply); } } } 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); IPEndPoint ep = new IPEndPoint(IPAddress.Parse(ipAddress), port); try { s.Connect(ep); } catch (Exception) { throw new IOException("無法連接伺服器"); } return s; } /// /// 關閉socket連接(用於登錄以前) /// private void CloseSocketConnect() { if (socketControl != null) { socketControl.Close(); socketControl = null; } bConnected = false; } /// /// 讀取Socket返回的所有字元串 /// /// 包含應答碼的字元串列 private string ReadLine() { while (true) { int iBytes = socketControl.Receive(buffer, buffer.Length, 0); strMsg += GB2312.GetString(buffer, 0, iBytes); if (iBytes < buffer.Length) { break; } } char[] seperator = { '\n' }; string[] mess = strMsg.Split(seperator); if (strMsg.Length > 2) { strMsg = mess[mess.Length - 2]; //seperator[0]是10,換行符是由13和0組成的,分隔後10後面雖沒有字元串, //但也會分配為空字元串給後面(也是最後一個)字元串數組, //所以最後一個mess是沒用的空字元串 //但為什麼不直接取mess[0],因為只有最後一行字元串應答碼與信息之間有空格 } else { strMsg = mess[0]; } if (!strMsg.Substring(3, 1).Equals(" "))//返回字元串正確的是以應答碼(如220開頭,後面接一空格,再接問候字元串) { return ReadLine(); } return strMsg; } /// /// 發送命令並獲取應答碼和最後一行應答字元串 /// /// 命令 private void SendCommand(String strCommand) { Byte[] cmdBytes = GB2312.GetBytes((strCommand + "\r\n").ToCharArray()); socketControl.Send(cmdBytes, cmdBytes.Length, 0); ReadReply(); } #endregion } }

『貳』 在遠程電腦上安裝一個FTP伺服器,把上面的」5G「文件下載到我的電腦需要多長時間謝謝

區域網的話 應該可以達到 10M/S左右的速度, 5G 也要10分鍾左右。 還得考慮交換機等等。

『叄』 什麼是FTP怎麼使用如何建立自己的FTP

3月29日 02:07 建立個人FTP伺服器教程 以及 內網、區域網設置IP,建立FTP

【怎樣建立個人FTP】

Serv-U FTP Server 5.0.0.11 final 特別破解版漢化版
點擊下載

《FTP Serv-U 教程》+《FTP的建立和維護手冊》
點擊下載

在網上做過軟體下載的人都知道,建立一個FTP下載伺服器相對比較簡單,一般用WIN2000下自帶的IIS就可以,但IIS在功能上好多都不盡人如意,下面我就介紹一款功能非常強大,但使用簡單的FTP伺服器構建軟體-Serv-U FTP Server,讓我們也來體驗一下自己DIY FTP伺服器的快樂! 在說明使用之前,讓我先大致介紹一下Serv-U(本文中提到Serv-U版本為3.0.0.17), Serv-U 是一個可以運行於Windows 95/98/2000/ME 和 Windows NT 4.0下的FTP伺服器程序如圖所示,

有了它,你的個人電腦就可以模擬為一個FTP伺服器,也就是說,你所連接的網路中的計算機用戶可以訪問你的個人電腦,通過FTP協議(文件傳輸協議)復制、移動、刪除你的電腦中的文件或文件夾,可以做一切許可權所允許的事情。FTP協議規定了計算機之間的標准通訊方式,使所有不同類型,不同操作系統,不同格式的電腦之間得以互換文件。它可以用最簡單的方式創建用戶帳號,並且在硬碟空間上劃分一定的區域用以存放文件,讓用戶以各種FTP客戶端軟體(如CuteFTP、WS_FTP等)上傳或下載所需要的文件。

有許多FTP伺服器和客戶端軟體可用於不同的系統中,Serv-U是用於運行MS-Windows 並且已安裝了WinSock 版本 1.1 兼容 TCP/IP協議的個人電腦中的,這幾乎包括了所有的Windows操作系統。

Serv-U由兩大部分組成,引擎和用戶界面。Serv-U引擎(ServUDaemon.exe)其實是一個常駐後台的程序,也是Serv-U整個軟體的心臟部分,它負責處理來自各種FTP客戶端軟體的FTP命令,也是負責執行各種文件傳送的軟體。在運行Serv-U引擎也就ServUDaemon.exe
文件後,我們看不到任何的用戶界面,它只是在後台運行,通常我們無法影響它,但在ServUAdmin.exe中我們可以停止和開始它。Serv-U引擎可以在任何Windows平台下作為一個本地系統服務來運行,系統服務隨操作系統的啟動而開始運行,而後我們就可以運行用戶界面程序了。在Win NT/2000系統中,Serv-U會自動安裝為一個系統服務,但在Win 9x/Me中,你需要在「伺服器」面板中選擇「自動開始」,才能讓它轉為系統服務。Serv-U用戶界面(ServUAdmin.exe)也就是Serv-U管理員,它負責與Serv-U引擎之間的交互。它可以讓用戶配置 Serv-U,包括創建域、定義用戶、並告訴伺服器是否可以訪問。啟動Serv-U管理員最簡單的辦法就是直接點接系統欄的「U」形圖標,當然,你也可以從開始菜單中運行它。

在此有必要把Serv-U中的一些重要的概念給大家講清楚:每個正在運行的Serv-U引擎可以被用來運行多個「虛擬」的FTP伺服器,在管理員程序中,每個「虛擬」的FTP伺服器都稱為「域」,因此,對於伺服器來說,不得不建立多個域時是非常有用的。每個域都有各自
的「用戶」、「組」和設置。一般說來,「設置向導」會在你第一次運行應用程序時設置好一個最初的域和用戶帳號。伺服器、域和用戶之間的關系大家可以參考下表:
*Serv-U 伺服器
*域 1
*用戶帳號 1
*用戶帳號 2
*用戶帳號 3
*域 2
*用戶帳號 1
*用戶帳號 2
*域 3
*用戶帳號 1
*用戶帳號 1

這個表有點類似與Serv-U管理員中伺服器、域和用戶的排列。

Serv-U FTP Server 是試用軟體,安裝後三十天內,你可以作為「專業版本」使它,但試用期過後,你就只能作為免費的「個人版
本」使用了,只有基本功能了。

好了,說了這么多,還沒到關鍵部分-如何自己來建立FTP伺服器。下面我就一步一步來說明。
一、 安裝原版軟體和漢化補丁,這個過程就不多說了,想必沒人不會的。
二、 建立第一個本地FTP伺服器
安裝完成後程序會自動運行,你也可以在菜單中選擇運行。
1、 第一次運行程序,它會彈出設置向導窗口如圖,

將會帶你完成最初的設置,
2、 單擊「下一步」,出現「顯示菜單圖像」的窗口,問你是否在菜單中顯示小圖像,看各人喜歡了;
3、 單擊「下一步」,這個窗口是讓你在本地第一次運行FTP伺服器,只要「下一步」就行了。
4、 接下來要你輸入你的IP地址如圖,

如果你自己有伺服器,有固定的IP,那就請輸入IP地址,如果你只是在自己電腦上建立FTP,而且又是撥號用戶,有的只是動態IP,沒有固定IP,那這一步就省了,什麼也不要填,Serv-U 會自動確定你的IP地址,「下一步」;
5、 在這兒要你輸入你的域名,如圖

如果你有的話,如:ftp.abc.com,沒有的話,就隨便填一個;
6、 「下一步」,詢問你是否允許匿名訪問如圖

一般說來,匿名訪問是以Anonymous為用戶名稱登錄的,無需密碼,當然如果你想成立一個會員區什麼的,就應該選擇「否」,不讓隨便什麼人都可以登錄,只有許可用戶才行,在此我們填「是」;
7、 「下一步」,問你匿名用戶登錄到你的電腦時的目錄,如圖,

你可以自己指定一個硬碟上已存在的目錄,如F:\temp\xyz;
8、 「下一步」,詢問你是否要鎖定該目錄,鎖定後,匿名登錄的用戶將只能認為你所指定的目錄(F:\temp\xyz)是根目錄,也就是說他只能訪問這個目錄下的文件和文件夾,這個目錄之外就不能訪問,對於匿名用戶一般填「是」;
9、 「下一步」,詢問你是否創建命名的帳號,也就是說可以指定用戶以特定的帳號訪問你的FTP,這對於辦會員區可很有用哦,你可以對於每個人都創建一個帳號,每個帳號的許可權不同,就可以不同程序地限制每個人的權利,方法將在後面講到,這里選擇「是」;
10、 「下一步」,請你填入所要建立的帳號的名稱,如圖,如:ldr,

11、 「下一步」,請輸入密碼,如:123,
12、 「下一步」,詢問登錄目錄是什麼,這一步與第7步一樣,如:F:\temp
13、 「下一步」,詢問你是否要鎖定該目錄,同第8步,這里選擇「否」;
14、 接下來詢問你這次創建的用戶的管理員許可權,如圖,

有幾項選擇:無許可權,組管理員,域管理員,只讀管理員和系統管理員,每項的許可權各不相同;這里選擇「系統管理員」;
15、 最後一步,點擊「完成」就OK了,你有什麼需要修改的,可以點「上一步」,或者進入Serv-U管理員直接修改。至此,我們建立
了一個域ftp.abc.com,兩個用戶,一個Anonymous,一個ldr。

三、 既然我們已經建立好FTP伺服器,那麼我們就應該可以用FTP客戶端軟體來嘗試登錄。
怎麼辦呢?其實很簡單,我們不用上網,就可以測試。我們知道,不上網時,本地機的IP地址默認就為127.0.0.1,FTP埠號為21。打開FTP客戶端軟體,我就用FlashFXP來說明,打開快速連接,填入相應內容,如圖

然後連接,如圖

可以看到,我左邊窗格以Anonymous登錄,右邊窗格以ldr登錄,由於是本地機,所以速度奇快,上網後,假如我要讓你登錄到我的電腦上,我只要把我的上網時的IP地址給你,你就可以匿名訪問我的電腦了(注意不要開防火牆),是不是很方便?

四、Serv-U管理員中的各項設置
在設置完成後,將會進入Serv-U管理員的主界面,如圖

左邊窗格中顯示各個欄目,右邊窗格中顯示各個欄目的具體選項,下面就大概講一講設置內容。
1、 在圖中,我們可以人為地控制Serv-U引擎的運行或停止,記住,在Win 9x/Me 中,我們就要在此選擇「系統服務」,才會運行
Serv-U引擎。
2、 「許可」,如果你花美元買了注冊號,就可以在此輸入。
3、 「設置」,這個設置是對於「本地伺服器」來說的。「常規」設置中,如圖

可以限制伺服器的最大速度,可以攔截FXP(站點到站點傳送),也可以限制用戶的數量,這樣不至於你的伺服器被拖跨。「目錄緩存」設置中,如圖

允許你自己確定目錄列表的個數以及超時時間,在Windows 95 和 NT下,目錄列表默認設置為25,當緩存滿了之後,新的請求將替換老的請求。「高級」設置中,如圖

可以讓你自己定義伺服器、Socket、文件的上傳和下載的各項設置。
4、 「活動」,在這里記錄了用戶的活動日誌,已封鎖的IP的活動日誌,以及任務日誌;任務日誌中顯示的就是你開始停止的各項操作記錄,你可以點擊右擊,選擇一此過濾文本,使其只顯示你所想見的內容,如圖

5、 「域」,這里包含了你一開始根據向導所建立的用戶、設置、域等。「域--設置」中所設置的內容其實與第3步差不多,只是它更
加具體,可以對於每一個不同域定製。「域--活動」中記載了這個域下所有用戶的活動情況。
6、 「域--組」,我們可以自己建立一些便於管理的組,然後把一類的用戶歸到一個組中。
7、 「域--用戶」中,大家可以看到一開始我們建立的兩個帳號,一個Anonymous,一個ldr。現在就帳號ldr來對其中的細節設置說明一下。
A、「帳號」欄,如圖

對於一些不守規則的人,我們可以選擇「禁用帳號」,雖然有帳號,但可以使用戶一時間無法登錄;你也可以設置讓程序到達某個日期後自動刪除某個帳號;下面幾欄是這個帳號的基本信息,我們都可以在此更改,其中密碼改過後並不顯示,而是統一顯示<>,特別要注意選項「鎖定用戶於主目錄」,什麼意思呢?大家應該碰到,每次我們登錄到FTP伺服器上後,在根目錄下只顯示「/」,選擇這項選項後,就是這樣,如果不選,會出現什麼情況呢?你可以做一下試驗,在根目錄下將顯示「/f:/temp/」,也就是說顯示了你硬碟中的絕對
地址,這在某些情況下是很危險的,有不懷好意的高手,你就麻煩了!

你可以隱藏屬性為隱藏的文件,可以限制同一IP的登錄個數,是否允許用戶更改密碼(這需要客戶端軟體的支持),最大上傳下載的速
度,超時時間以及空閑時間,你也可以限制最大用戶數量,如20,說明同時只能有20個用戶登錄。
C、「目錄訪問」欄,如圖

在此你可以控制用戶對於文件目錄的許可權,對文件有讀取、寫入、刪除、追加、執行等操作,對於文件夾有列表、創建、刪除,以及是否繼承子目錄;如果覺得目錄不夠,你也可以添加可訪問的目錄。
D、「IP訪問」欄,如圖

在這里你可以規定某個IP是否可以訪問你的FTP伺服器,你可以拒絕它的訪問,只要填上相應的IP地址,以後由這個IP的訪問通通被攔下。
E、「上傳/下載率」欄,如圖

在這里你可以設置上傳和下載之間的比值,控制好上傳和下載之間的數據流量關系。
F、「配額」欄,如圖

這里你可以為每個FTP用戶設置磁碟空間,點擊「計算當前」,可以知道當前目前下的所有空間大小,在「最大」一欄中填入你想要限制的容量。

最後有一點,改過設置後一定要點擊右鍵,選擇「應用」使設置生效才行,否則一切都白做了!!
希望大家學會後,能為更多的人提供下載,享受寬頻帶來的快樂!

==========================================================================================================

SERV-U FTP的歡迎詞設置
讓你的SERV-U FTP看起來更專業一點
現在很多的朋友都用SERV-U做個人FTP的伺服器,有關如何使用SERV-U架設伺服器的文章很多了,這兒我就不多說了。不過大家不知道注意到了沒有,當你登陸很多FTP的時候,會顯示一些歡迎信息,比如說顯示你的IP,告訴你目前有多少人在使用FTP,帶寬是多少等等。。。看起來就比較的專業樣子。其實你自己也是可以做的,SERV-U這個軟體本身就有這個功能。下面我就說明以下如何在自己的FTP裡面加上這些信息。

第一、先建立一個文本文件,隨便取一個名字。我們這兒就取message.txt吧。

第二、這個這個文本文件裡面加上這些文字

-----------------------------------
歡迎來到XXX的個人FTP伺服器
你的IP地址是:%IP
目前伺服器所在的時間是 %time
已經有 %u24h 個用戶在最近24小時訪問過本FTP
本FTP伺服器已經運行了 %ServerDays 天,%ServerHours 小時 和 %ServerMins 分。

伺服器的運行情況:

所有登陸用戶數量: %loggedInAll total
當前登陸用戶數量: %Unow
已經下載位元組數: %ServerKbDown Kb
已經上傳位元組數: %ServerKbUp Kb
已經下載文件數: %ServerFilesDown
已經上傳文件數: %ServerFilesUp
伺服器平均帶寬: %ServerAvg Kb/sec
伺服器當前帶寬: %ServerKBps Kb/sec
------------------------------------

其中XXX可以改成你的名字

你也可以加上一些你自己認為喜歡的文字,不過要注意的是每行最好不要超過80個字元

其中以%開頭的都是一些變數,下面是SERV-U能支持的變數

時間和日期

%Time - 顯示你的計算機當前時間
%Date - 顯示你的計算機當前日期

伺服器的統計信息

%ServerDays - 顯示伺服器已經運行的天數
%ServerHours - 顯示伺服器已經運行的小時數
%ServerMins - 顯示伺服器已經運行的分鍾數
%ServerSecs - 顯示伺服器已經運行的秒數
%ServerKbUp - 顯示自從伺服器運行以來已經上傳的位元組數
%ServerKbDown - 顯示自從伺服器運行以來已經下載的位元組數
%ServerFilesUp - 顯示自從伺服器運行以來已經上傳的文件數
%ServerFilesDown - 顯示自從伺服器運行以來已經下載的文件數
%LoggedInAll - 顯示自從伺服器運行以來已經登陸的用戶數
%ServerAvg - 顯示伺服器的平均帶寬
%ServerKBps - 顯示伺服器的當前帶寬

伺服器的設定信息

%MaxUsers - 顯示伺服器能同時登陸的最大用戶數量
%MaxAnonymous - 顯示伺服器能同時登陸的最大匿名用戶數量

用戶信息

%Name - 顯示登陸的用戶名
%IP - 顯示登陸的用戶IP地址
%Dir - 顯示登陸的用戶的當前目錄
%Disk - 顯示登陸的用戶的當前磁碟
%DFree - 顯示登陸的用戶的當前磁碟空間,單位是MB
%FUp - 顯示登陸的用戶上傳的文件數量
%FDown - 顯示登陸的用戶下載的文件數量
%FTot - 顯示登陸的用戶上傳和下載的總的文件數量
%BUp - 顯示登陸的用戶上傳的位元組數,單位是KB
%Bdown - 顯示登陸的用戶下載的位元組數,單位是KB
%BTot - 顯示登陸的用戶上傳和下載的總位元組數,單位是KB
%TconM - 顯示登陸用戶連接時間,單位是分鍾
%TconS - 顯示登陸用戶連接時間,單位是秒,要和%TconM一起使用
%RatioUp - 顯示登陸用戶的上傳流量限制
%RatioDown - 顯示登陸用戶的下載流量限制
%RatioCredit - 顯示登陸用戶還有多少credit可以上傳和下載,這個是針對有些FTP是要上傳多少文件,才能下載多少文件而設置的
%QuotaUsed - 顯示登陸用戶的已經使用了多少空間,單位是KB
%QuotaLeft - 顯示登陸用戶的還有多少空間可以使用,單位是KB
%QuotaMax - 顯示登陸用戶的的最大空間,單位是KB
後面3個是針對有磁碟限制的用戶設置的

用戶數量

%UNow - 顯示當前有多少用戶連接
%UAll - 顯示從伺服器運行以來一共有多少用戶連接過
%U24h - 顯示最近24小時有多少用戶
%UAnonAll - 顯示當前總的匿名用戶數量
%UAnonThisIP - 顯示所有匿名登陸的用戶數
%UNonAnonAll - 顯示所有當前非匿名登陸用戶數
%UNonAnonThisIP - 顯示所有非匿名登陸用戶數
%UThisName - 顯示所有使用這個名字登陸的用戶數

自己在先建立一個.txt文件,輸入你想要顯示的文字,具體參數看上面的內容,然後在Serv_u內的server設置裡面,加入這個.txt文件就可以了

==========================================================================================================

——常見FTP登陸Log信息——
常見FTP登陸Log信息

1.
Connected. Waiting for response.
220 Serv-U FTP Server v4.0 for WinSock ready...
USER anonymous
530 Sorry, no ANONYMOUS access allowed.
QUIT
這個就是不許匿名登錄啦

2.
Connected. Waiting for response.
220 Serv-U FTP Server v4.0 for WinSock ready...
USER test
331 User name okay, need password.
PASS xxxxxx
530 Not logged in.
QUIT
一般是密碼輸入錯誤時出現的信息,但對於Serv-U來說,如果沒有這個帳號(test)存在,也會產生同樣的出錯信息。

3.
Connecting to xxx.xxx.xxx.xxx, Port 21 (#1)
ERROR: Connection timed out
這個表明對方未開機,也可能是對方不在你能訪問的范圍內

4.
Connecting to xxx.xxx.xxx.xxx Port 21 (#1)
ERROR: Connection refused
這個一般表明對方已開機,但未開啟FTP服務(沒有開Serv-U)
也可能為對方不提供在這個埠上的服務

5.
Connecting to xxx.xxx.xxx.xxx, Port 21 (#1)
Connected. Waiting for response.
Disconnected from server.
Connection attempt failed. Waiting for retry...
出現這個信息實在是很倒霉,你極有可能被對方Ban了。
如果只是Ban幾分鍾or幾小時or一天還好,不然只有和站長說說好話,讓他給你解封吧。

6.
Connecting to xxx.xxx.xxx.xxx, Port 21 (#1)
Connected. Waiting for response.
USER XXX
331 User name okay, need password
PASS xxxxxx
530 Not logged in, unauthorized IP address.
QUIT
這個有點麻煩,你的IP不在站長允許訪問的IP范圍內,只有和站長聯系,讓他把你的IP網段加入Allow Access列表裡吧

7.
Connected. Waiting for response.
220 Serv-U FTP Server v4.0 for WinSock ready...
USER user
421 Too many users - please try again later.
哈哈,這個很常見吧,用戶太多

8.
Connected. Waiting for response.
220 Serv-U FTP Server v4.0 for WinSock ready...
USER test
530 Not logged in, only one session from same IP allowed at a time.
QUIT
每個IP只能開一個下載,就不要用多線程啦,小心Ban了你。

----------------------------------------------------------------------------------------------

內網、區域網如何設置IP,建立FTP
首先,我們知道動態IP機器出去的最大問題是IP,因為動態IP機器的IP外網是無法識別的,我們討論的是最普通的區域網內工作站出去做FTP和WEB站點的問題!
動態域名解析正好能夠解決此類問題,它的原理是將本機的動態IP自動映射到預先申請好的虛擬域名上,這樣外面就可以通過訪問固定的虛擬域名來訪問到動態IP機器了。
<花生殼>該軟體使用方便,幾乎不用動什麼腦筋,唯一要做的事情就是去注冊,然後申請一個以vicp.net為後綴虛擬域名。
1.進入http://www.oray.net/,下載<花生殼>,並「注冊網域護照」!
2.注冊完成後,登陸「我的控制台」

3.進入「我的控制台」,點擊左下角的『我要.激活花生殼服務』

4.點擊「開始」進入

在『免費域名』填入不重復的你想要得名字就是你將來的域名,例如:AGHU

5.以後就是「服務條款」和「填寫站點信息」,這些地球人都知道怎麼填!
填完結束,恭喜你,你的域名已經有了!例如:你以後的域名就是AGHU.VICP.NET
申請完免費域名以後,就安裝你已經下載的<花生殼>,然後打開運行

輸入你的注冊名和密碼,等一下就會激活你的域名,興奮吧!
然後你的ftp和web就可以啟動咯!
架設ftp伺服器的事情,另外有帖子詳細介紹了!!
======================================
區域網內公開的ip只有一個,除非你是在主機上建私服,否則你無法公開你的私服,只能在區域網內,解決的辦法如下。
由於公網ip地址有限,不少isp都採用多個內網用戶通過代理和網關路由共用一個公網ip上internet的方法,這樣就限制了這些用戶在自己計算機上架設個人網站。要實現對我們來說是比較困難的,首先得得到系統管理員的支持才能夠實現。因為這一切的設置必須在代理伺服器上做的。要實現這一點,可以用windows 2000 服務者 的埠映射功能,除此之外winroute pro也具

揪錯 ┆

『肆』 如何獲得FTP伺服器ZONE,我用CUTEFTP寫程序時,下載文件和FTP伺服器文件時間點相差8小時。

這很正常!不過和伺服器時間沒有關系!假如說你伺服器有一個文件最後修改時間是2010年1月1日,等你下載到本地,最後修改時間就會變成今天的日期!
如果實在想知道伺服器用的time zone,你完全可以直接問技術支持或自己寫一個腳本去獲取!
FTP客戶端顯示的最後修改時間是假象,也就是根據你本地的時間已經做了時間的相對變動,其實文件在伺服器上顯示的最後修改時間還是根據伺服器的time zone顯示的!

『伍』 ftp上傳的文件日期和時間問題

ftp上傳的文件日期和時間是伺服器端時間和日期,如果ftp上傳時間和日期和本地不一樣,可以修改ftp伺服器端時間和事情就可以了。

修改時間日期方法:

1、雙擊計算機時間,打開日期和時間修改頁面。

『陸』 怎麼獲取FTP伺服器上文件的時間信息(要到分鍾)

對不起,這位先生或女士,雖然我很想幫你解決,但我學了這么久的計算機,可能沒有你這樣的要求。
很難從FTP伺服器上獲取文件的時間信息,你只能用 VC 或 JS 等編輯語言達到用 FTP傳送的時候使的文件的時間與當前的伺服器時間吻合,而您要求的分鍾實在很難計算!

『柒』 FTP使用詳解

1.什麼是FTP(文件傳輸協議)
FILE TRANSFERPROTOCOL(FTP)意為文件傳輸協議,用於管理計算機之間的文件傳送。FTP通常指文件傳輸服務。
FTP是Internet上使用非常廣泛的一種通訊協議。它是由支持Internet文件傳輸的各種規則所組成的集合,這些規則使 Internet用戶可以把文件從一個主機拷貝到另一個主機上,因而為用戶提供了極大的方便和收益。FTP通常也表示用戶執行這個協議所使用的應用程序(例如:凱屋「上當「),從而獲取所需的信息資料。
FTP和其它 Internet服務一樣,也是採用客戶機/伺服器方式。使用方法很簡單,啟動FTP客戶端程序先與遠程主機建立連接,然後向遠程主機發出傳輸命令,遠程主機在收到命令後就給予響應,並執行正確的命令。FTP有一個根本的限制,那就是,如果用戶未被某一FTP主機授權,就不能訪問該主機,實際上是用戶不能遠程登錄(Remote Login)進入該主機。也就是說,如果用戶在某個主機上沒有注冊獲得授權,沒有用戶名和口令,就不能與該主機進行文件的傳輸。而AnonymousFTP(匿名FTP)則取消了這種限制。

2.什麼是Anonymous FTP(匿名文件傳輸)
Anonymous(匿名文件傳輸)能夠使用戶與遠程主機建立連接並以匿名身份從遠程主機上拷貝文件,而不必是該遠程主機的注冊用戶。用戶使用特殊的用戶名「Anonymous」和「guest」就可有限制地訪問遠程主機上公開的文件。現在許多系統要求用戶將Emai1地址作為口令,以便更好地對訪問進行跟綜。出於安全的目的,大部分匿名FTP主機一般只允許遠程用戶下載(download)文件,而不允許上傳 (upload)文件。也就是說,用戶只能從匿名FTP主機拷貝需要的文件而不能把文件拷貝到匿名FTP主機。另外,匿名FTP主機還採用了其他一些保護措施以保護自己的文件不至於被用戶修改和刪除,並防止計算機病毒的侵入。在具有圖形用戶界面的WorldWide Web環境於1995年開始普及以前,匿名FTP一直是Internet上獲取信息資源的最主要方式,在Internet成千上萬的匿名PTP主機中存儲著無以計數的文件,這些文件包含了各種各樣的信息,數據和軟體。人們只要知道特定信息資源的主機地址,就可以用匿名FTP登但是匿名FTP仍是 Internet上傳輸分發軟體的一種基本方法。

3.什麼是Remote Login(遠程登錄)
Remote Login(遠程登錄)指用戶通過Internet登錄到遠程主機上。在這種連接建立之後,用戶所在的計算就可以作為遠程主機的終端一樣使用。 Internet上遠程登錄的主要方式是Telnet,匿名FTP也需要首先經過遠程登錄才能進行文件傳輸。

4.什麼是Upload(上傳)
Upload(上傳)指把數據從本地計算機傳到遠程主機上,因此受到嚴格的管理和控制,但Upload是提交用戶信息和要求以實現遠程交互應用的基礎。

5.何為FTP連接
進行FTP連接首先要給出目的FTP伺服器的名稱或地址,當連接到FTP伺服器後,一般要進行登錄,在檢驗用戶ID號和口令後,連接才得以建立,某些系統也允許用戶進行匿名登錄。與在所有的多用戶系統中一樣,對於同一目錄或文件,不同的用戶擁有不同的許可權,所以在使用過程中,如果發現不能下載或上載某些文件時,一般是因為用戶許可權不夠。

6.FTP文件傳輸方式
FTP可用多種格式傳輸文件,通常由系統決定,大多數系統(包括UNIX系統)只有兩種模式:文本模式(ASCII)和二進制模式(BIN/IMAGE)。
文本傳輸器使用ASCII字元,並由回車鍵和換行符分開,而二進制不用轉換或格式化就可傳字元,二進制模式比文本模式更快,並且可以傳輸所有ASCII值,所以系統管理員一般將FTP設置成二進制模式。應注意在用FIP傳輸文件前,必須確保使用正確的傳輸模式,按文本模式傳二進制文件必將導致錯誤。

7.FTP的可靠性問題
FTP建立在傳輸層TCP協議之上,TCP是面向連接的協議,負責保證數據從源計算機到目的計算機的傳輸。TCP採用校驗、確認接收和超時重傳等一系列措施提供可靠的傳輸,所以在傳輸過程中FTP程序如果沒有提示錯誤,就無需擔心傳輸問題。