2013-02-10 20 views
4

我正在編寫一個程序來通過局域網中的計算機傳輸文件,它已經在Delphi中搜索文件傳輸方法。我發現UDP是一個很好的解決方案,但是有一個問題:在我發現的每個示例或文章中都有一個服務器程序旁邊的客戶端程序,但是我的程序必須發送和接收來自/來自網絡中的每臺計算機,沒有特定的服務器或客戶端,像p2p,我不想讓電腦服務器和另一個客戶端,我該怎麼辦?我也搜索了Indy文章,也在Server/Client模式下工作(據我發現)。Delphi中的UDP文件傳輸

enter image description here

希望問題是不夠清楚

+0

這並不意味着你必須編程,只需要你的程序中有兩個組件,例如TIdUDPClient + TIdUDPServer。 – bummi 2013-02-10 07:55:48

+0

雖然你的問題還不清楚 - 如果你想使用UDP發送文件,必須在另一端等待接收它們。如果你只是想複製文件,則不需要UDP或其他任何東西;你可以在機器之間複製文件。你能解釋一下你到底想要做什麼嗎? – 2013-02-10 08:05:03

+0

@Ken,我想發送(並且正如你在每次發送時所說的,在另一端需要等待的東西),問題也在我身上,它並不總是「computer_A」發送和「computer_B」接收,有時是「B 「發送和」A「收到,有時」C「發送和」B「收到,....所以我不能說」A「總是聽,」B「總是發送,情況會改變。 – Armin 2013-02-10 08:06:32

回答

4

看看Indy的TIdTrivialFTPTIdTrivialFTPServer組件。 TFTP是基於UDP的文件傳輸協議。

+0

FTP與多播無關。和TFTP都沒有。 TFTP只是一個簡單的一對一協議,非常慢(等待任何數據包的ACK)並且意味着硬件資源不足。與OP問題無關。 TCP/IP甚至HTTP(作爲OCI 7層)比TFTP更可靠,因爲它們具有窗口化,分組重發和許多其他可靠的傳輸手段。 – 2013-02-11 21:00:14

+1

@ArnaudBouchez:OP的問題或評論中沒有任何內容讓我認爲廣播或多播實際上是需要的。這是你所設想的,OP沒有確認。 OP實際描述的是有多少P2P實際工作。同行決定誰是「客戶」,誰是「服務器」,並且可以在需要時交換角色,但每個單獨的文件傳輸仍然是一個方向或另一個方向的客戶端/服務器模型。像TFTP這樣的UDP協議,以及像FTP和HTTP這樣的TCP協議,都可以很好地工作。我沒有說TFTP是有效的,只是考慮到OP最初使用UDP的願望。 – 2013-02-11 21:41:02

+0

@Remy,即時通訊如此新手到網絡編程,你能告訴我一個這些組件使用的例子鏈接嗎? – Armin 2013-02-12 15:42:47

6

UDP可工作於廣播模式,這是你所需要的。但是這樣的UDP廣播是在當前網絡之外不可路由(即它們被路由器阻止),因此如果您的項目需要在主物理網絡之外訪問,則必須實施更復雜的事情。

不要重新發明輪子!如果你想看到一些工作落實源這個概念,見戰神銀河

「德爾福自組織P2P網絡項目具有高規模 能力和快播型的搜索系統客戶端支持 多源文件傳輸,部分文件共享,內置 音頻/視頻播放器和分散式聊天室「。

The source code files are available from SourceForge。您可以根據需要重新使用/調整P2P網絡層,但是如果您在項目中使用它,請注意Ares源代碼的許可條款。

+0

和多播?它可以在多播模式下工作嗎? – 2013-02-10 16:02:59

+0

當然,它通過UDP在多播模式下工作。但是不能,因爲它能夠建立一個TCP/IP P2P分佈式網絡。 – 2013-02-11 20:56:05