port模式與pasv模式的區別就是ftp傳輸通路鏈結中資料傳輸建立時的模式.
port模式是伺服器端初始化連線,而pasv模式是客戶端初始化連線
伺服器端一旦啟動例項化兩個有固定埠號的socket,控制scontrolsocket埠為21,資料sdatasocket埠比如指定為1650
主線程:控制埠scontrolsocket.accept()一直監聽是不是有客戶端試圖建立連線。。。。。。
對應的csocket = scontrolsocket.accept()
這樣伺服器端的csocket就建立了乙個與客戶端的連線
開始了通訊
對應這個csocket和客戶端的通訊是新開的乙個子執行緒
通訊具體(客戶端的clientsocket)
1。clientsocket.connect(ep);//ep為scontrolsocket----c
2。csocket [i]= scontrolsocket.accept()----s
3。clientsocket.send(...user ~~~-----c
4。while(true)
判斷str.startwith("")->user
如果資料庫存在這樣的user傳送220 test ----s
5。clientsocket.receive(..如果前三個字串是以220為開始
clientsocket.send(.. pass ~~~-----c
6。第4步中,判斷str.startwith("")->pass
如果資料庫中對應第4步的user,這個pass也相同,傳送220 test ----s
7。clientsocket.receive(..如果前三個字串是以220為開始
clientsocket.send(.. pasv ~~~-----c
8。第4步中,判斷str.startwith("")->pasv
pasv是一種被動模式,就是伺服器端接收到客戶端的pasv命令後先csocket[i]傳送比如:150。(。。7,18),這樣客戶端就知道伺服器開啟了7*256+18的資料埠,同時sdatasocket.accept ()等待,如果客戶端去連線(客戶端已經知道了去連20埠,就例項化乙個新的socket),就有csocket[j] = sdatasocket.accept(),這樣對於乙個客戶端就有兩個socket通訊了,這時csocket[j].send(結果,然後伺服器的csocket[j]迴圈判斷,如果sdatasocket的連線斷開就csocket[i].send(220。。。,客戶端收到需要的結果就關閉資料連線。 至此pasv模式結束
初始化100個連線客戶端的控制csocket,100個連線客戶端的資料傳輸cdatasocket
只要乙個ssocket 繫結乙個本地伺服器終結點,開始監聽||
|建立乙個主線程中做處理:||
|迴圈執行下面的程式:||
|以下的**塊為乙個臨界區||
|ssocket一直在監聽,得到乙個可用的csocket,用csocket把監聽到的請求連線上
建立乙個子執行緒用於處理乙個客戶端的具體ftp請求||
|
ftp的port和pasv模式
一 ftp的port和pasv模式的工作方式 ftp使用2個tcp埠,首先是建立乙個命令埠 控制埠 然後再產生乙個資料埠。國內很多教科書都講ftp使用21命令埠和20資料埠,這個應該是教書更新太慢的原因吧。實際上ftp分為主動模式和被動模式兩種,ftp工作在主動模式使用tcp 21和20兩個埠,而工...
Serv U FTP之PASV和PORT模式
ftp的連線一般是有兩個連線的,乙個是客戶程和伺服器傳輸命令的,另乙個是資料傳送的連線。ftp服務程式一般會支援兩種不同的模式,一種是port模式,一種是passive模式 pasv mode 我先說說這兩種不同模式連線方式的分別。先假設客戶端為c,服務端為s.port模式 當客戶端c向服務端s連線...
Serv U FTP之PASV和PORT模式
注 我們在使用 url 此ip為虛擬內網ftp伺服器對映公網ip 提示如下錯誤 ftp伺服器上的資料夾時發生錯誤,請檢查是否有許可權訪問該資料夾。在解決此問題前,請先看下文 ftp的連線一般是有兩個連線的,乙個是客戶程和伺服器傳輸命令的,另乙個是資料傳送的連線。ftp服務程式一般會支援兩種不同的模式...