2012-06-28 242 views
1

我要開發1個FTP(簡單)服務器C。
我的意思是什麼簡單 ?? 我的意思是FTP服務器必須支持:
ftp ftp服務器C

  1. 認證(user和pass,PORT)
  2. 更改目錄(CD)
  3. 文件列表(LIST)
  4. 文件retrive(RETR)

我剛剛發展爲「拆分部分」的數字1-2-3-4,我必須合併成main.c。所以他們沒有問題。
我不明白的是如何「接收」來自客戶端的通信。
我的意思是如何實現客戶想要的(USER,PASS,CD,LIST,RETR)?
我讀過rfc959,但我還沒有完全理解客戶端和服務器之間的通信。
摘要:

  1. 客戶端連接到服務器(所以這個部分是插座「接受(..)」的服務器),分辯? 1a服務器發送給客戶端「你連接」了嗎?
  2. 客戶端發送給服務器用戶,密碼(文件1,auth.c但我不知道客戶端如何向服務器發送用戶和密碼請求時如何讀取)
  3. 成功登錄後服務器發送文件列表第3部分,list.c,沒問題)
  4. 客戶端向服務器發送它要下載的文件或changedir命令(再次,如何讀取從客戶端的請求這些信息?)

我希望你明白:)

編輯:我在GNU/Linux

+1

我建議你開始就更簡單了,通過閱讀網絡教程,直到你知道插座是什麼以及它們如何工作,如何創建簡單的客戶端,簡單的服務器,阻塞和非阻塞套接字之間的區別,服務器的可以處理多個連接(基本上按該順序)。然後你可以開始研究製作一個FTP服務器。 –

+0

當然,除了上面的網絡相關的東西,你還需要一些基本的理解,如字符串和字符串解析,文件處理和列表。 –

+0

我已經開發了一個小型客戶端和服務器(也有叉),但他們的工作不像和FTP客戶端和服務器。事實上,我的程序使用是:1)客戶端連接到服務器2)客戶端發送「文件列表」3)服務器發送結果4)客戶端發送文件名5)服務器發送文件...所以不正確的像一個FTP xD – polslinux

回答

2

雖然你的問題有點混亂,但我試圖回答它。使用「用戶名密碼」等命令行參數並將這些argv[]send傳遞給服務器,並在服務器端使用recv接收。爲了更好地理解,請參閱鏈接Client.cpp

希望這可以解決您的困惑。

+2

請記住upvote並接受解決方案,如果它可以幫助你:-) – Abhineet

+0

非常感謝:)它可以幫助我一點! – polslinux

0

是如果你使用Berkeley套接字API(你提accept()意味着你),你通常使用recv()從套接字讀取數據。您需要從客戶端正在連接的套接字讀取數據,然後檢查您所得到的信息,以確定它是否是您可以處理的有效命令。

+0

哦對不起:)是的,我在GNU/Linux上開發:) – polslinux

+0

但我不明白的是「客戶端發送什麼」?它發送「USER用戶名PASS pasw」或「你好USER選擇用戶名」或其他? – polslinux