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

簡單ftpclient

發布時間: 2022-07-06 07:10:45

1. linux環境下,在java中用sun.net.ftp.FtpClient類去讀取文件名含有「點號」的文件時報錯找不到文件

java對.號解析的問題。linux是對.不敏感的。簡單,轉義字元,搞定。2011\.9\.9日XX詳情.doc

或者
2011\\.9\\.9日XX詳情.doc

對java的轉義字元不是很了解。上述兩種應該有一個可行。

2. 手機可以搭建FTP嘛,用什麼搭建

手機可以搭建FTP,很簡單!
手機去下載每步FTP服務,然後安裝運行,則手機FTP服務就啟動了
電腦不用安裝任何人間,打開資源管理器輸入IP地址和埠號就可以操作手機上的文件了。
如果在電腦安裝FTP伺服器,那就是用手機來操作復制粘貼這些工作
如果是在手機安裝FTP伺服器,那就是用電腦來操作復制粘貼這些工作
其實還是用電腦操作起來比較方便,所以用手機可以搭建FTP是比較好的選擇

3. filezilla client 怎麼連接ftp服務端

創建連接時,輸入伺服器ip和賬號、密碼就可以了。不過我們早把ftp用愛米雲共享網盤代替了。功能和用戶體驗完勝ftp,比ftp簡單多了!客戶端就像網路雲盤,登陸後就能用了。文件傳輸速度快、還有秒傳、文件去重、文件歷史版本、回收站一些非常實用的功能。對windows系統兼容性都比較好,server2003到2012都支持

4. java上傳文件到ftp伺服器時出錯,求高手回答

你先輸出一下System.out.println(ftpClient.isConnected());看看是否連接啊,是否進入if語句了么!最簡單找原因的辦法就是debug斷點調試了

5. ftpclient 用的是nio還是io

nio是new io的簡稱,從jdk1.4就被引入了。現在的jdk已經到了1.6了,可以說不是什麼新東西了。但其中的一些思想值得我來研究。這兩天,我研究了下其中的套接字部分,有一些心得,在此分享。
首先先分析下:為什麼要nio套接字?
nio的主要作用就是用來解決速度差異的。舉個例子:計算機處理的速度,和用戶按鍵盤的速度。這兩者的速度相差懸殊。如果按照經典的方法:一個用戶設定一個線程,專門等待用戶的輸入,無形中就造成了嚴重的資源浪費:每一個線程都需要珍貴的cpu時間片,由於速度差異造成了在這個交互線程中的cpu都用來等待。
nio套接字是怎麼做到的?
其實,其中的思想很簡單:輪詢。一個線程輪詢多個input;傳統的方式是:有n個客戶端就要有n個服務線程+一個監聽線程,現在採取這種凡是,可以僅僅使用1個線程來代替n個服務線程以此來解決。
具體應用例子:
在ftp的控制連接中,因為只有少量的字元命令進行傳輸,所以可以考慮利用這種輪詢的方式實現,以節省資源。

-----------------------------------------------------
Java中的阻塞和非阻塞IO包各自的優劣思考
NIO 設計背後的基石:反應器模式,用於事件多路分離和分派的體系結構模式。

反應器(Reactor):用於事件多路分離和分派的體系結構模式

通常的,對一個文件描述符指定的文件或設備, 有兩種工作方式: 阻塞 與非阻塞 。所謂阻塞方式的意思是指, 當試圖對該文件描述符進行讀寫時, 如果當時沒有東西可讀,或者暫時不可寫, 程序就進入等待 狀態, 直到有東西可讀或者可寫為止。而對於非阻塞狀態, 如果沒有東西可讀, 或者不可寫, 讀寫函數馬上返回, 而不會等待 。

一種常用做法是:每建立一個Socket連接時,同時創建一個新線程對該Socket進行單獨通信(採用阻塞的方式通信)。這種方式具有很高的響應速度,並且控制起來也很簡單,在連接數較少的時候非常有效,但是如果對每一個連接都產生一個線程的無疑是對系統資源的一種浪費,如果連接數較多將會出現資源不足的情況。

另一種較高效的做法是:伺服器端保存一個Socket連接列表,然後對這個列表進行輪詢,如果發現某個Socket埠上有數據可讀時(讀就緒),則調用該socket連接的相應讀操作;如果發現某個 Socket埠上有數據可寫時(寫就緒),則調用該socket連接的相應寫操作;如果某個埠的Socket連接已經中斷,則調用相應的析構方法關閉該埠。這樣能充分利用伺服器資源,效率得到了很大提高。

傳統的阻塞式IO,每個連接必須要開一個線程來處理,並且沒處理完線程不能退出。

非阻塞式IO,由於基於反應器模式,用於事件多路分離和分派的體系結構模式,所以可以利用線程池來處理。事件來了就處理,處理完了就把線程歸還。而傳統阻塞方式不能使用線程池來處理,假設當前有10000個連接,非阻塞方式可能用1000個線程的線程池就搞定了,而傳統阻塞方式就需要開10000個來處理。如果連接數較多將會出現資源不足的情況。非阻塞的核心優勢就在這里。

為什麼會這樣,下面就對他們做進一步細致具體的分析:

首先,我們來分析傳統阻塞式IO的瓶頸在哪裡。在連接數不多的情況下,傳統IO編寫容易方便使用。但是隨著連接數的增多,問題傳統IO就不行了。因為前面說過,傳統IO處理每個連接都要消耗 一個線程,而程序的效率當線程數不多時是隨著線程數的增加而增加,但是到一定的數量之後,是隨著線程數的增加而減少。這里我們得出結論,傳統阻塞式IO的瓶頸在於不能處理過多的連接。

然後,非阻塞式IO的出現的目的就是為了解決這個瓶頸。而非阻塞式IO是怎麼實現的呢?非阻塞IO處理連接的線程數和連接數沒有聯系,也就是說處理10000個連接非阻塞IO不需要10000個線程,你可以用1000個也可以用2000個線程來處理。因為非阻塞IO處理連接是非同步的。當某個連接發送請求到伺服器,伺服器把這個連接請求當作一個請求"事件",並把這個"事件"分配給相應的函數處理。我們可以把這個處理函數放到線程中去執行,執行完就把線程歸還。這樣一個線程就可以非同步的處理多個事件。而阻塞式IO的線程的大部分時間都浪費在等待請求上了。

6. Linux下用C語言寫一個FTP系統程序,包含server和client兩部分

我覺得你可能沒講清楚吧,是寫一個類似FTP功能的程序(包括server和client)?還是要實現一個FTP的server和client?前者很簡單,先網路linux socket編程,再網路linux下文件讀寫,之後無非就是調通server和client的tcp連接之後,把讀出來的東西發過去就是了。後者要實現完整的ftp協議,如果你只是本科的話,我覺得這個確實夠難的,但這也是有開源代碼的,http://sourceforge.net/projects/libftp/,反正是大作業,慢慢看吧。不過我感覺你的需求多半是前者,否則你們老師也太BT了,這年頭誰還會自己開發ftp協議啊。。。

7. 什麼伺服器管理軟體好用

十大常見的伺服器管理軟體

當網站發展到一定的規模,站長應該開始考慮要為網站託管伺服器。通常情況下伺服器會被放到BGP機房,網站管理員通過遠程來管理伺服器。在網站伺服器進行託管時,需要在伺服器上安裝一些伺服器管理軟體,才能更為有效地管理這台遠程伺服器,我根據我自己的管理經驗,推薦十個有用的伺服器管理軟體,供大家參考和分享。

1、遠程桌面連接

遠程桌面連接(以前稱為「終端服務客戶端」)主要是用於對遠程託管的伺服器進行遠程管理,使用非常方便,如同操作本地電腦一樣方便,而遠程桌面連接工具,我個人喜好IIS7。
IIS7遠程桌面管理工具(3389、vps、伺服器批量管理、批量遠程工具) 是一款綠色小巧,功能實用的遠程桌面管理工具,其界面簡潔,操作便捷,能夠同時遠程操作多台伺服器,並且多台伺服器間可以自由切換,適用於網站管理人員使用。軟體下載地址:iis7遠程桌面管理工具下載

8. 給出一個C++或Java編寫的ftp伺服器程序

給你一個MFC寫的:
// FtpClient.h: interface for the CFtpServer class.
//

#if !defined(_FTPCLIENT_H)
#define _FTPCLIENT_H

#include <afxinet.h>

class CFtpClient
{
//構造/析構函數
public:

CFtpClient(const char *pszFtpIp, const char *pszFtpPort, const char *pszFtpUser, const char *pszFtpPassWord);
//功能:構造函數
//參數:pszFtpIp---------Ftp伺服器IP地址
// pszFtpPort-------Ftp伺服器埠
// pszFtpUser-------Ftp用戶名
// pszFtpPassWord---Ftp用戶密碼
//返回值:無

virtual ~CFtpClient();
//功能:析構函數
//參數:無
//返回值:無

//公有成員函數
public:

BOOL ConnectFtpServer();
//功能:連接FTP伺服器
//參數:無
//返回值:TRUE--連接成功,FALSE--連接失敗

void DisConnectFtpServer();
//功能:斷開與FTP伺服器的連接
//參數:無
//返回值:無

BOOL PutFileToFtpServer(const char *pszFilePath);
//功能:上傳指定的文件到FTP伺服器
//參數:要上傳的文件名
//返回值:TRUE--連接成功,FALSE--連接失敗

BOOL GetFileFromFtpServer(const char *pszFilePath);
//功能:從FTP伺服器下載指定文件
//參數:要下載的文件名
//返回值:TRUE--連接成功,FALSE--連接失敗

CString GetUpLoadFilePath();
//功能:得到上傳文件名
//參數:無
//返回值:得到的當前路徑

//私有成員變數
private:
char m_szFtpIp[20]; //Ftp伺服器IP地址
UINT m_uFtpPort; //Ftp伺服器埠
char m_szFtpUser[20]; //Ftp用戶名
char m_szFtpPassWord[20]; //Ftp用戶密碼

CInternetSession *m_pInetSession; //Internet會話對象指針
CFtpConnection *m_pFtpConnection; //FTP服務連接對象指針
};

#endif

// FtpClient.cpp: implementation of the CFtpServer class.
//

#include "FtpClient.h"

CFtpClient::CFtpClient(const char *pszFtpIp, const char *pszFtpPort, const char *pszFtpUser,const char *pszFtpPassWord)
{
strcpy(m_szFtpIp, pszFtpIp);
m_uFtpPort = atoi(pszFtpPort);
strcpy(m_szFtpUser, pszFtpUser);
strcpy(m_szFtpPassWord, pszFtpPassWord);

m_pInetSession = NULL;
m_pFtpConnection = NULL;
}

CFtpClient::~CFtpClient()
{

}

BOOL CFtpClient::ConnectFtpServer()
{
//創建Internet會話
m_pInetSession = new CInternetSession(AfxGetAppName(), 1, PRE_CONFIG_INTERNET_ACCESS);

try
{
//連接Ftp伺服器
m_pFtpConnection = m_pInetSession->GetFtpConnection(m_szFtpIp, m_szFtpUser, m_szFtpPassWord, m_uFtpPort);
}
catch(CInternetException *pEx)
{
char szError[1024];
pEx->GetErrorMessage(szError, 1024);
pEx->Delete();

CLog Log;
Log.RecordLog("連接Ftp伺服器", CString("9999"), CString(szError));

return FALSE;
}

return TRUE;
}

void CFtpClient::DisConnectFtpServer()
{
if(m_pFtpConnection != NULL)
{
m_pFtpConnection->Close();
delete m_pFtpConnection;
m_pFtpConnection = NULL;
}

if(m_pInetSession !=NULL)
{
m_pInetSession->Close();
delete m_pInetSession;
m_pInetSession = NULL;
}
}

BOOL CFtpClient::PutFileToFtpServer(const char *pszFilePath)
{
//1. 判斷伺服器是否連接
if(m_pFtpConnection == NULL)
{
return FALSE;
}

char szLocalFile[200] = {0};
char szRemoteFile[200] = {0};

//2. 本地文件名
sprintf(szLocalFile, "%s", pszFilePath);

//3. 遠程文件名
char szDrive[10] = {0};
char szDir[210] = {0};
char szFileName[70] = {0};
char szExt[10] = {0};

_splitpath(pszFilePath, szDrive, szDir, szFileName, szExt);
sprintf(szRemoteFile, "%s\\%s.%s", g_strEnterpriseID, szFileName, szExt);

//4. 文件上傳
if(!m_pFtpConnection->PutFile(szLocalFile, szRemoteFile))
{
return FALSE;
}

return TRUE;
}

BOOL CFtpClient::GetFileFromFtpServer(const char *pszFilePath)
{
//1. 判斷伺服器是否連接
if(m_pFtpConnection == NULL)
{
return FALSE;
}

char szLocalFile[200] = {0};
char szRemoteFile[200] = {0};

//2. 本地文件名
sprintf(szLocalFile,"%s",pszFilePath);

//3. 遠程文件名
char szDrive[10] = {0};
char szDir[210] = {0};
char szFileName[70] = {0};
char szExt[10] = {0};

_splitpath(pszFilePath, szDrive, szDir, szFileName, szExt);
sprintf(szRemoteFile, "%s\\%s.%s", g_strEnterpriseID, szFileName, szExt);

//4. 文件下載
if(!m_pFtpConnection->GetFile(szRemoteFile, szLocalFile))
{
return FALSE;
}

return TRUE;
}

CString CFtpClient::GetUpLoadFilePath()
{
CString strPath = "", strDir = "";

//得到當前日期
CTime time = CTime::GetCurrentTime();
CString strDate = time.Format("%Y%m%d");

//得到上傳文件路徑
char filepath[MAX_PATH];
GetMoleFileName(NULL, filepath, MAX_PATH);
strDir.Format("%s", filepath);
strPath = strDir.Left(strDir.ReverseFind('\\')) + strDate + "\\*.txt";

return strPath;
}
//保存成兩個文件,然後添加到你的工程中就可以調用了。

9. linux里的文件如何移動到虛擬機里

把文件傳到郵件附件里,然後再linux打開下載就行了;或者設置虛擬機與主機共享,linux下的不太好設,你去網上找個設置linux虛擬機共享教程,網上說的很清楚的