1、想用socket+mfc寫一個ftp伺服器,但是文件操作出了問題,不知道怎麼寫,網上沒有這方面的教
// MFC 里有CFtpConnection,你可以直接使用,不需要自己去寫
CInternetSession sess(_T("My FTP Session"));
CFtpConnection* pConnect = NULL;
try
{
// Request a connection to ftp.microsoft.com. Default
// parameters mean that we'll try with username = ANONYMOUS
// and password set to the machine name @ domain name
pConnect = sess.GetFtpConnection(_T("ftp.microsoft.com"));
// use a file find object to enumerate files
CFtpFileFind finder(pConnect);
// start looping
BOOL bWorking = finder.FindFile(_T("*"));
while (bWorking)
{
bWorking = finder.FindNextFile();
_tprintf_s(_T("%s
"), (LPCTSTR)finder.GetFileURL());
}
}
catch (CInternetException* pEx)
{
TCHAR sz[1024];
pEx->GetErrorMessage(sz, 1024);
_tprintf_s(_T("ERROR! %s
"), sz);
pEx->Delete();
}
// if the connection is open, close it
if (pConnect != NULL)
{
pConnect->Close();
delete pConnect;
}
2、用socket寫FTP客戶端問題
是的。
需要有兩個套接字,一個用於命令(cmdSocket),一個用於數據(dataSocket)
cmdSocket與ftp伺服器21埠(如果ftp伺服器沒做特殊設置的話)連接,dataSocket因PASV和PORT模式不同,而有所差別。
PASV模式:
1)通過命令cmdSocket套接字發送PASV
2)server端會返回ip地址和專門的數據傳輸埠號
3)在命令套接字cmdSocket上發送LIST命令
4)本地建立dataSocket連接server提供的數據傳輸埠號(此步中,本地作為客戶端)
5)server端通過cmdSocket返回150 開頭的響應(需要讀取cmdSocket)
6)本地通過dataSocket接收數據,即通過dataSocket的inputStream讀取dataSocket中的數據
7)傳輸完畢(read返回-1),cmdSocket會返回226 開頭的響應,關閉連接即可
PORT模式:
1)在本地啟動某個埠的監聽(本地作為服務端,使用ServerSocket)
2)通過命令cmdSocket套接字發送PORT,PORT命令後加參數:本地ip+剛啟動監聽的埠
3)server端響應200
4)在cmdSocket上發送LIST命令
5)調用ServerSocket.accept()獲得數據套接字dataSocket(ftp server作為客戶連接本地的埠)
6)server端通過cmdSocket返回150 開頭的響應(需要讀取cmdSocket)
7)本地通過dataSocket接收數據,即通過dataSocket的inputStream讀取dataSocket中的數據
8)傳輸完畢(read返回-1),cmdSocket會返回226 開頭的響應,關閉連接即可
3、c# 用socket 實現ftp 功能的,伺服器端、客戶端的代碼
伺服器:Socket ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
string ip = "伺服器ip地址";
IPAddress ipAddr = IPAddress.Parse(ip);
int port = 8000;
IPEndPoint ippoint = new IPEndPoint(ipAddr, port);
ServerSocket.Bind(ippoint);//綁定
ServerSocket.Listen(10);//監聽
客戶端:
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
int port = 8000;
IPAddress myIP = IPAddress.Parse("伺服器ip地址");
IPEndPoint myClient = new IPEndPoint(myIP, port);
sock.Connect(myClient);//連接伺服器
4、如何用SOCKET建立FTP數據通道
文件傳輸協議(FTP)作為網路共享文件的傳輸協議,在網路應用軟體中具有廣泛的應用。FTP的目標是提高文件的共享性和可靠高效地傳送數據。
在傳輸文件時,FTP 客戶端程序先與伺服器建立連接,然後向伺服器發送命令。伺服器收到命令後給予響應,並執行命令。FTP 協議與操作系統無關,任何操作系統上的程序只要符合 FTP 協議,就可以相互傳輸數據。本文主要基於 LINUX 平台,對 FTP 客戶端的實現原理進行詳盡的解釋並闡述如何使用 C 語言編寫一個簡單的 FTP 客戶端。
5、有socket編程實現FTP文件傳輸的嗎?
?
6、socket編程:FTP協議客戶端 CAsynSocket類的問題
我之前寫過一個示例的FTP伺服器。FTP協議和HTTP協議一樣,都是屬於一問一答的,當你的命令連接與FTP伺服器連接後,就要等待響應伺服器的歡迎信息 220, 然後再發送請求進行登陸,發送完後不要再發送其他命令了,一定要等剛剛的請求響應完成。所以你不要一次性把4個命令全部發送過去。一定要保證一問一答。
7、使用socket編寫ftp,一台機器又作伺服器又作客戶端,為什麼客戶端能連上伺服器,而伺服器連不上客戶端呢
你給出的代碼不是關鍵的代碼呀,把關於bind,accept,conncet三個函數相關的東西放上來看下呀。
一般而言:伺服器連不上客戶端是因為客戶端沒有提供服務。(UDP)
對於TCP而言,相信沒有連接不上的問題,只是主動與被動的問題,因為TCP協議多數是用在(C/S)模式。如果不不明白請將關鍵代碼示出。
8、C語言用Socket連接FTP服務端發送帳號的問題
敢不敢排個版
9、我在用C++的SOCKET寫一個簡單的FTP伺服器,需要把本地目錄發給客戶端,請問當用戶發送"LIST"命令時,怎麼
看你的伺服器是基於什麼系統了。如果是unix/linux系統,你可以用系統調用來讀取當前目錄下的文件列表(包括目錄,目錄也是文件),通常這個步驟只需要一個循環。通過這個步驟其實你就可以到了當前目錄下的文件名,然後你只需把這些文件名發送給客戶端就可以了。當然,這是最簡單的方式。你也是可以根據自己的喜好,把文件的訪問許可權,擁有者等信息,按照一定的格式發給客戶端。
對於windows系統,處理方式與此類似,只不過把讀取當前目錄下的文件列表的系統調用換成windows相應的調用即可。