當前位置:首頁 » 文件傳輸 » 監控ftp下載速率
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

監控ftp下載速率

發布時間: 2023-02-28 21:19:48

1. 關於FTP伺服器速度的問題

2MBps,如果學校網路速度理想的話,FTP伺服器的網路理論下行速率是256KB/s,但是一般情況下也就220-240KB/s,按照這個速度計算,在網路正常的情況下:
300MB電影*1024=307200KB
307200/230(取平均數)=1335.7秒
1335.7/60=22.3分鍾
所以,按照平均每秒鍾230KB的速度,需要花費22.3分鍾
當然這還不包括網路出現不穩定的情況。
____________________________
糾正一下樓下的錯誤
提問者說的是從學校傳到家裡,所以家裡(2Mbps
ADSL)應該是看下行速率,學校看上行速率。

2. 遠程視頻監控對帶寬的要求

遠程視頻監控通常指的是客戶端安全監視和遠程監控領域內用於特定應用的IP監視系統,該系統使用戶能夠通過IP網路實現視頻監控及視頻圖像的錄像、以及相關的報警管理。

首先要了解視頻存儲空間大小與傳輸帶寬的之間的計算關系:

1.上行帶寬就是本地上傳信息到網路上的帶寬。上行速率是指用戶電腦向網路發送信息時的數據傳輸速率,比如用FTP上傳文件到網上往,影響上傳速度的就是「上行速率」。

2.下行帶寬就是從網路上下載信息的帶寬。下行速率是指用戶電腦從網路下載信息時的數據傳輸速率,比如從FTP伺服器上文件下載到用戶電腦,影響下傳速度的就是「下行速率」。

傳輸帶寬計算: 比特率大小×網路監控攝像機的路數=網路帶寬至少大小;

地方監控點:

CIF視頻格式每路監控攝像頭的比特率為512Kbps,即每路監控攝像頭所需的數據傳輸帶寬為512Kbps,10路網路監控攝像機所需的數據傳輸帶寬為:512Kbps(視頻格式的比特率)×10(攝像機的路數)≈5120Kbps=5Mbps(上行帶寬)

D1視頻格式每路監控攝像頭的比特率為1.5Mbps,即每路無線攝像頭所需的數據傳輸帶寬為1.5Mbps,10路攝像機所需的數據傳輸帶寬為:1.5Mbps(視頻格式的比特率)×10(網路監控攝像機的路數)=15Mbps(上行帶寬)

即:採用D1視頻格式各地方監控所需的網路上行帶寬至少為15Mbps,720P(100萬像素)的視頻格式每路無線攝像頭的比特率為2Mbps,即每路無線攝像頭所需的數據傳輸帶寬為2Mbps,10路網路監控攝像機所需的數據傳輸帶寬為:
1080P(200萬像素)的視頻格式每路監控攝像頭的比特率為4Mbps,即每路無線攝像頭所需的數據傳輸帶寬為4Mbps,10路攝像機所需的數據傳輸帶寬為:4Mbps(視頻格式的比特率)×10(攝像機的路數)=40Mbps(上行帶寬)

即:採用1080P的視頻格式各地方監控所需的網路上行帶寬至少為40Mbps;

CIF視頻格式的所需帶寬:
512Kbps(視頻格式的比特率)×10(監控點的攝像機的總路數之和)=Kbps=5Mbps(下行帶寬)
即:採用CIF視頻格式監控中心所需的網路下行帶寬至少5Mbps D1視頻格式的所需帶寬:
1.5Mbps(視頻格式的比特率)×10(監控點的網路攝像機的總路數之和)=15Mbps(下行帶寬)5

即:採用D1視頻格式監控中心所需的網路下行帶寬至少15Mbps
720P(100萬像素)的視頻格式的所需帶寬:
2Mbps(視頻格式的比特率)×10(監控點的網路攝像機的總路數之和)=20Mbps(下行帶寬),
即:採用720P的視頻格式監控中心所需的網路下行帶寬至少20Mbps

3. 怎麼使用FTP測試網速

下個FTP軟體 flash fxp 然後連到ftp上去 有兩個窗口 一個是ftp 一個是你本地的文件夾 互相拖文件 從ftp到本地是下載 從本地到ftp是上傳 軟體摸索一下就會用了

4. 關於如何實現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) { 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

5. 我的電腦從ftp上下載東西為什麼很慢

FTP下載速度慢的原因比較多,但一般來說,就以下幾點:
首當其沖的就是伺服器的所謂的質量問題,即伺服器的配置,配置好的空間自然就速度快,然後是所在的地理位置,帶寬的地域自然速度也快,在這之後還有對伺服器的維護程度,是否有病毒侵佔,有時病毒會慢慢拉垮資源,越來越慢,最後致使系統崩潰。
接著就是上傳文件所在地,即客戶端的電腦速度快慢,還是所在區域網的速度,這些自然是重要因素,伺服器速度再快,本地的速度慢,怎麼也不會快起來。
然後是由於某個文件卡住了,或是FTP佔用了伺服器好久的資源,有時也會特慢,解決這種情況的辦法就是將FTP關掉,重新打開一個,繼續上傳,但要記得是採用續傳,不能採用覆蓋,否則先前上傳的成果與功勞都沒了。
最後還有一種情況,盡管反復重啟FTP,但就是不行,速度還是很慢,在這種情況下,當然也有可能是伺服器出了問題或是被病毒侵佔了,或是內存在這個特定時候消耗得厲害,解決這種情況,可以將路由重啟一下,換成另外一個IP,然後再將FTP關掉重新打開。

6. 我們公司自己搭建了一個FTP伺服器!當遠程客戶訪問下載的時候,他的下載速度和我們的上傳速率有關嗎

當然有關系。雖然是固定IP但是不知公司是什麼方式接入的,如果是ADSL接入按照原理和實際情況是達不到這個上傳速度的。光纖的話就沒問題,只有實際損耗一點,
單個客戶最大下載速度也取決於他的帶寬,如果他是6M或以上帶寬,就能達到理論的你的上傳速度。當然實際使用要出去損耗。

7. 如何讓加快ftp上下載的速度

比如增加帶寬或提高電腦配置方法我就不提了,比較容易做的:
1、提高你的網卡等級是可以的,比如以前老的是100M的,你可以換成現在主流的1000M的。
2、可以使用比較主流的ftp軟體,比如flash ftp,cute ftp都是相當不錯的主流軟體,能成倍提你的上傳下載的速度。
3、限制同時登陸ftp的人數,從一定程度上也可以加快上傳下載的速度。
只能想到這些,希望對你有幫助。

8. 如何用FTP上傳文件並記錄上傳或下載的速率

自己做