Ⅰ C語言用Socket連接FTP服務端發送帳號的問題
敢不敢排個版
Ⅱ 狀態:> 正在連接 ftp 數據 socket 121.131.123.76:50007...
經常登錄各種FTP伺服器,會遇到socket錯誤,朋友也經常遇到,來問我。偏偏大家使用的是不同的FTP軟體,所以,今天我把幾種目前常用FTP軟體的解決辦法告訴大家。
★Cute FTP 3.5英文版:FTP—>Settings—>Options—>Firewall,將「PASV mode」前復選框中的打勾去掉。
★Cute FTP3.5中文版:FTP—>設置—>選項—>防火牆,「PASV方式(A)」前復選框中的打勾去掉。
★Cute FTP4.0中文版:右擊你所建立的ftp站點—>選擇屬性(properties)—>去掉"use PASV mod" 選擇項
★Cute FTP Pro2.0中文版:編輯—>全局設置—>連接—>連接類型,「PASV/PORT」下拉選項菜單選擇PORT。
★Leap FTP2.7.2:Sites—>Site Manager—>Advanced,將「Use PASV mode」前復選框中的打勾去掉。
★flashfxp : 選項->參數->代理->去掉「使用被動模式」
★flashget : 選項->參數->代理伺服器->編輯->將「Use PASV mode」前復選框中的打勾去掉。
Ⅲ ftp無法訪問遠端伺服器,顯示socket已連接,正在等待歡迎頁面,然後長時間無響應,顯示連接超時,重新登錄
那就是你FTP配置出問題了。你多下載幾個FTP軟體,來用用。
Ⅳ 用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 開頭的響應,關閉連接即可
Ⅳ socket編程:FTP協議客戶端 CAsynSocket類的問題
我之前寫過一個示例的FTP伺服器。FTP協議和HTTP協議一樣,都是屬於一問一答的,當你的命令連接與FTP伺服器連接後,就要等待響應伺服器的歡迎信息 220, 然後再發送請求進行登陸,發送完後不要再發送其他命令了,一定要等剛剛的請求響應完成。所以你不要一次性把4個命令全部發送過去。一定要保證一問一答。
Ⅵ 連接ftp伺服器時,提示Socket Error #10060 Connection timed out 怎樣解決,是什麼情況才會出現。
是不是你本機的防火牆或者反病毒導致連接超時?
Ⅶ 想用socket+mfc寫一個ftp伺服器,但是文件操作出了問題,不知道怎麼寫,網上沒有這方面的教
//MFC里有CFtpConnection,你可以直接使用,不需要自己去寫
CInternetSessionsess(_T("MyFTPSession"));
CFtpConnection*pConnect=NULL;
try
{
//Requestaconnectiontoftp.microsoft.com.Default
//parametersmeanthatwe'lltrywithusername=ANONYMOUS
//@domainname
pConnect=sess.GetFtpConnection(_T("ftp.microsoft.com"));
//
CFtpFileFindfinder(pConnect);
//startlooping
BOOLbWorking=finder.FindFile(_T("*"));
while(bWorking)
{
bWorking=finder.FindNextFile();
_tprintf_s(_T("%s "),(LPCTSTR)finder.GetFileURL());
}
}
catch(CInternetException*pEx)
{
TCHARsz[1024];
pEx->GetErrorMessage(sz,1024);
_tprintf_s(_T("ERROR!%s "),sz);
pEx->Delete();
}
//iftheconnectionisopen,closeit
if(pConnect!=NULL)
{
pConnect->Close();
deletepConnect;
}
Ⅷ ftp無法連接
注意這段話:
227 Entering Passive Mode (60,165,133,154,13,31)
ERROR: [Data]: Connection refused
PASV模式,PORT模式錯誤~!
如果你用的是ftp客戶端軟體請把被動模式選擇上就可以了。
補充:返回值:227 Entering Passive Mode (60,165,133,154,13,31)說明
每一個ftp發送之後,ftp伺服器都會返回一個字元串,其中包括一個返回代碼和一串說明信息。這個返回碼主要是用於判斷命令是否被成功執行了。除此之外,還有一個非常重要的命令的返回。當發送pasv之後,返回「227 entering passive mode (60,165,133,154,13,31)」。這意味著在伺服器上有一個埠被開放,他將為我們後面接著的數據傳輸作好准備,但是我們如何知道該埠號呢,就在(60,165,133,154,13,31)中,前面四位指伺服器的地址,關鍵是最後兩位,將最後第二位乘256再加上最後一位的值就是我們的埠號,也就是13*256+31。取得埠號之後我們就可以用socket連接到這里。這為我們後面的工作作好准備了,因為我們的取得列表,上傳,下載文件都要依靠它來實現。常用的返回如下:
125 data connection already open; transfer starting.
226 transfer complete.
227 entering passive mode (60,165,133,154,13,31).
230 user xxxxx logged in.
331 password required for xxxxx.
425 can』t open data connection.
226 closing data connection.
ftp客戶端編程結構:
前面已提到了ftp命令及其響應信息。其實我們做ftp客戶端工具只不過是用一個winsocket連接上ftp伺服器,然後象其發送命令。在這個過程中,我們依靠發送——響應的機制。即發送ftp命令——接收返回的響應信息——分析該信息——執行相關操作——發送下一條命令。在一般意義上,有一個socket用來連接ftp伺服器的相關埠(如默認的21),它負責ftp命令的發送和接收返回的響應信息。一些操作如「進入目錄」,「刪除文件」,依靠這個socket發送一條命令就可完成了。然而對於有數據傳輸的操作,主要是顯示遠端目錄列表,上傳、下載文件,我們不得不依靠另一個socket來完成。在進行這種操作之前,必須發送pasv命令,它返回了227開頭的信息,在括弧中有以逗號隔開的六個數字,前四個指伺服器的地址,關鍵是最後兩個,將倒數第二個乘256再加上最後一個數字,其結果就是ftp伺服器開放的用於下一條命令來進行數據傳輸的埠。如我們得到227 entering passive mode (60,165,133,154,13,31),那麼埠號是13*256+31=3359。我們用一個socket來連接這個埠,之後,我們可根據具體的操作(顯示目錄list,上傳文件stor,下載retr)來發送命令。返回的響應代碼為125開頭,也就是連接打開了,可以開始傳輸數據,這時就可用socket的發送或接收方法來傳輸數據。完成之後,伺服器會返回代碼226 transfer complete,表明數據傳輸完成。值得注意的是,我們最好不要一次發送多條命令,例如我們要回到上層目錄並且顯示這個目錄,我們得發送cp,pasv,list,我們不能一下子發送:cp\r\n, pasv\r\n, list\r\n。 而是發送完cp之後等待其響應代碼,然後再發送後面一條。當pasv返回之後,我們打開另一個socket連接到相關埠上。然後發送list,返回125之後在開始接收數據,最後返回226表明完成。對於上傳和下載也是差不多的過程(下載之前要先取得文件的大小)。
Ⅸ 我在用C++的SOCKET寫一個簡單的FTP伺服器,需要把本地目錄發給客戶端,請問當用戶發送"LIST"命令時,怎麼
看你的伺服器是基於什麼系統了。如果是unix/linux系統,你可以用系統調用來讀取當前目錄下的文件列表(包括目錄,目錄也是文件),通常這個步驟只需要一個循環。通過這個步驟其實你就可以到了當前目錄下的文件名,然後你只需把這些文件名發送給客戶端就可以了。當然,這是最簡單的方式。你也是可以根據自己的喜好,把文件的訪問許可權,擁有者等信息,按照一定的格式發給客戶端。
對於windows系統,處理方式與此類似,只不過把讀取當前目錄下的文件列表的系統調用換成windows相應的調用即可。
Ⅹ 怎樣在winCE里用socket通信給FTP上傳文件
現ftp主要三種用途:
、用作網站空間存放網站程序
二、用作論壇或其類型網站遠程附件盤
三、公司(集體)或需要
文件傳輸協議(FTP)RFC 959定義於198510月發布文件傳輸協議(FTP)設計跨平台、簡單且易於實現協議文件傳輸協議(FTP)漫演化史互聯網重要應用至今卻已江河本文作者各面列舉些文件傳輸協議(FTP)詬病缺點
FTP文件傳輸協議必消亡五理由
1.數據傳輸模式合理
考慮文件自身內容味使用ASCII模式傳輸數據合理文件傳輸協議(FTP)應該具自檢測功能用戶進行自定義
雖現許LinuxWindows客戶端已經支持自傳輸模式達數代UNIXWindows客戶端都默認使用ASCII傳輸模式種傳輸模式甚至造文件損壞
2.工作式設計合理
文件傳輸協議(FTP)主模式(PORT)或模式(PASV)工作決定數據鏈接建立式
主模式客戶端首先向伺服器端發送IP址埠號等待伺服器端建立TCP鏈接模式客戶端同首先建立伺服器鏈接伺服器端啟埠(10245000間)等待客戶端傳輸數據
文件傳輸協議(FTP)讓思議客戶端偵聽伺服器端
3.與防火牆工作協調
文件傳輸協議(FTP)誕網路址轉換(NAT)防火牆前網路存惡意攻擊今數終用戶IPv4址已路由防火牆使用IPv4址短缺
FTP意味著呢意味著FTP客戶端IP址路由或者位於防火牆能使用傳輸模式進行數據傳輸
伺服器端IP址路由或者位於防火牆呢FTP進行數據傳輸
現許防火牆適用於NAT環境使用些特殊技巧(hacks)允許FTP防火牆工作需要防火牆進行配置
4.密碼安全策略完善
互聯網早期文件傳輸協議(FTP)並沒密碼安全作規定FTP客戶端伺服器端數據明文形式傳輸任何通訊路徑路由具控制能力都通嗅探獲取密碼數據
我使用SSL封裝FTPFTP通建立鏈接進行數據傳輸我即便保護密碼安全難保護數據傳輸安全性
自文件傳輸協議(FTP)發布安全數據傳輸經歷足發展推薦使用SCP取代FTP進行文件傳輸
5.FTP協議效率低
FTP伺服器檢索文件包含繁復交換握手步驟:
客戶端建立FTP伺服器端控制埠TCP Socket鏈接並等待TCP握手完
客戶端等待伺服器端發送執
客戶端向伺服器端發送用戶名並等待響應
客戶端向伺服器端發送密碼並等待響應
客戶端向伺服器端發送SYST命令並等待響應
客戶端向伺服器端發送TYPE I命令並等待響應
用戶需要伺服器端切換目錄客戶端仍發送命令並等待響應
主模式客戶端需要發送PORT命令伺服器端等待響應(模式與主模式相反)
建立數據傳輸鏈接(需要經三握手建立條TCP Socket連接)
通鏈接傳輸數據
客戶端等待伺服器端控制連接發送2xx指令確保數據傳輸功
客戶端發送QUIT命令並等待伺服器響應
同情形我看看HTTP協議:
HTTP客戶端向HTTP伺服器端建立條TCP Socket連接
HTTP客戶端向HTTP伺服器端發送GET命令包含URL、HTTP協議版本、虛擬主機名等等並等待響應
HTTP伺服器端響應包含所想要數據完
傳輸文件FTP需要往復10HTTP需要2傳輸文件FTP省略發送用戶名密碼步驟HTTP則使用固定套接字(Socket)相同TCP連接傳輸文件
綜所述雖文件傳輸協議(FTP)曾經顯赫現已經既安全友且效率低協議勢必取代