線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2693
推到 Plurk!
推到 Facebook!

IdServer, IdFtp 的差異性

答題得分者是:pcplayer99
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-07-26 10:11:30 IP:61.67.xxx.xxx 未訂閱
請問各位:

我有A,B,C,D,E 四台電腦分佈全省
A: Terminal Server
B,C,D,E : XP(WorkStation)
今有B,C,D,E 會以 遠端桌面方式連入到 A 去執行一支程式, 而且 B,C,D,E都是以浮動IP進行,然後各由B,C,D,E操作者運作後會產生各自的DATABASE資料,但因是Terminal Server狀況,所以產生的DATABASE是在T/S的主機內,本支程式意欲將B,C,D,E所各自產生的DATABASE送回自己的LOCAL 端,所以我做了以下設計:
以 TIdTcpServer置入 A 的電腦, TidTcpClient 置入 B,C,D,E的電腦,流程大致如下
B,C,D,E 啟動 --> 連接 A --> A 取得各Client 的IP值 --> B,C,D,E 做各自的工作 --> 產生 DATABASE -->A 程式依據指令將DATABASE 送到該各自 B,C,D,E (非同時),其中在判斷IP的部份我是用 TIdTcpServer 的 PeerIP 來取得,然後我要問的問題如下
當 A 要將檔案上傳 B,C,D,E 時
我將 A 當成 TIdTcpClient 使用, B,C,D,E 當成 TIdTcpSever方式,由 A 取得IP後連入B,C,D,E,然後傳檔,這段是已測試OK的
與我使用 B,C,D,E 各自先架設 FTP server, 建立好帳號,密碼,然後 A 以 TIdFTP方式連入 B,C,D,E的FTPserver傳送檔案,這段我也是測試OK的

目前我有一個疑惑就是
利用 TidTcp方式傳送檔案與用TIdFtp方式傳送檔案,兩者間有何差異,(一個2M的小檔,或一個30M的大檔來說
1.那一種比較穩定
2.那一種比較快速
3.或者兩者沒有不同,只是方式不同而已
因為我測試的結果,感覺好像沒有什麼差別,只是程式撰寫上 TIdTcp要來得比較複雜,因為 B,C,D,E 要同時兼具TIdTcpServer 及TIdTcpClient身份,在運作中互相切換。
不知各位有何看法呢?
編輯記錄
P.D. 重新編輯於 2007-07-26 10:12:09, 註解 無‧
P.D. 重新編輯於 2007-07-26 10:14:05, 註解 無‧
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-07-26 10:24:05 IP:60.248.xxx.xxx 未訂閱
我比較好奇的是
B,C,D,E皆需掛一支TCP或FTP Server的程式
如果逆向思考
把FTP或TCP Server掛在Terminal ,IIS啟用這個功能
B,C,D,E透過Browser去下載這份Data

這樣的架構適不適用呢?
danny
版主


發表:100
回覆:522
積分:595
註冊:2002-03-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-07-26 10:29:19 IP:211.76.xxx.xxx 訂閱
P.D.兄您已經說到重點了 ...
"因為我測試的結果,感覺好像沒有什麼差別,只是程式撰寫上 TIdTcp要來得比較複雜,因為 B,C,D,E 要同時兼具TIdTcpServer 及TIdTcpClient身份,在運作中互相切換。"

基本上 TIdFtp 是架構在 TCP 之上的, 只是他有自己的機制, 如使用 port 21 為溝通界面, ID/Password .... 等
而使用 TIdTcp 就要完全自己玩 .....

1.那一種比較穩定
TIdFtp

2.那一種比較快速
TIdTcp 因為可以自訂機制, 理論上可以減少一些傳送, 但不是太多 ...

3.或者兩者沒有不同,只是方式不同而已
可以這麼說

我認為使用 TIdFtp 是比較好的選擇, 因為他被使用那麼多年了而沒有被淘汰, 可見有他可取之處
但自己用 TIdTcp 寫可能會有考慮不週之處, 給您參考 .........


===================引 用 P.D. 文 章===================
請問各位:

我有A,B,C,D,E 四台電腦分佈全省
A: Terminal Server
B,C,D,E : XP(WorkStation)
今有B,C,D,E 會以 遠端桌面方式連入到 A 去執行一支程式, 而且 B,C,D,E都是以浮動IP進行,然後各由B,C,D,E操作者運作後會產生各自的DATABASE資料,但因是Terminal Server狀況,所以產生的DATABASE是在T/S的主機內,本支程式意欲將B,C,D,E所各自產生的DATABASE送回自己的LOCAL 端,所以我做了以下設計:
以 TIdTcpServer置入 A 的電腦, TidTcpClient?置入 B,C,D,E的電腦,流程大致如下
B,C,D,E 啟動 -->?連接 A? --> A 取得各Client 的IP值? -->?B,C,D,E 做各自的工作? --> 產生 DATABASE? -->A 程式依據指令將DATABASE 送到該各自 B,C,D,E (非同時),其中在判斷IP的部份我是用 TIdTcpServer 的 PeerIP 來取得,然後我要問的問題如下
當 A 要將檔案上傳 B,C,D,E 時
我將 A 當成 TIdTcpClient 使用, B,C,D,E 當成 TIdTcpSever方式,由 A 取得IP後連入B,C,D,E,然後傳檔,這段是已測試OK的
與我使用 B,C,D,E 各自先架設 FTP server, 建立好帳號,密碼,然後 A 以 TIdFTP方式連入 B,C,D,E的FTPserver傳送檔案,這段我也是測試OK的

目前我有一個疑惑就是
利用 TidTcp方式傳送檔案與用TIdFtp方式傳送檔案,兩者間有何差異,(一個2M的小檔,或一個30M的大檔來說
1.那一種比較穩定
2.那一種比較快速
3.或者兩者沒有不同,只是方式不同而已
因為我測試的結果,感覺好像沒有什麼差別,只是程式撰寫上 TIdTcp要來得比較複雜,因為 B,C,D,E 要同時兼具TIdTcpServer 及TIdTcpClient身份,在運作中互相切換。
不知各位有何看法呢?
------
將問題盡快結案也是一種禮貌!
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-07-26 10:48:10 IP:61.67.xxx.xxx 未訂閱

===================引 用 pedro756901 文 章===================
我比較好奇的是
B,C,D,E皆需掛一支TCP或FTP Server的程式
如果逆向思考
把FTP或TCP Server掛在Terminal?,IIS啟用這個功能
B,C,D,E透過Browser去下載這份Data

這樣的架構適不適用呢?
===================引 用 pedro756901 文 章===================
我就知道我這樣寫一定有人會誤會, 如果是 pedro756901兄所提的那樣, 其實事情會簡單很多, 我只要在 A 架 FTP server 就ok了, 也不用搞一個TidTcp 出來, 因為就是必須由 A 主動發送檔案給 B,C,D,E 的電腦, 而不是由 B,C,D,E 發出 ReQuest 的需求再由 A SEND FILE, 所以寫出了 TidTcp的傳送方式, 因為以往都是用 TIdFtp, 所以才會有這樣的疑惑?
而 Danny版主提出的看法, 不知大夥是否也是看法一致呢? 我想多了解一下, Danny版主 Sorry, 不是有意對您有所質疑哦,請不要誤會!
因為 FTP 方式會關係到 FTP server系統的問題,諸如使用 Server-U 或其他FTP server , 各有其控制機制,以及server權限控管通行上的問題,還有 pasive等問題,而似乎 TIdTCP模式只要兩端一連上就暢行無阻,所以如果加上安全機制的影響下,所以我現在考量上比較難決擇使用何者方式進行是對客戶比較好的? 所以如果是各位的話,您會選擇那一種方式來做?

另外,我想到一個問題,如果使用FTP方式, FTP是必須架設在B,C,D,E 上,然後 B,C,D,E是採用浮動IP,如果啟動FTP server後,B,C,D,E的IP被改變了,FTP server 是否會斷線,或者會主動以新的IP來重新連線待命,因為我一直以來都是做固定IP,沒有遇過以浮動IP為主的電腦,所以不是很清楚這一段!
編輯記錄
P.D. 重新編輯於 2007-07-26 10:58:05, 註解 無‧
P.D. 重新編輯於 2007-07-26 11:03:48, 註解 無‧
P.D. 重新編輯於 2007-07-26 11:18:15, 註解 無‧
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-07-26 13:52:08 IP:61.222.xxx.xxx 訂閱
基本上 B,C,D,E 都使用浮動IP,那麼 A 如何定位發送,會送錯對象吧。
所以我認為由 A 去主動發送是有風險的,顯然不適用的。

最近我也在研究這個部分。
我最後決定是使用 HTTPSERVER ,Web Server 為自寫。MultiThread ADO 處理。
具有檔案續傳。同時可用於上傳或下傳或傳遞自訂命令。已經搞出來了。

FTP 我覺得死板。
TCP 有點風險,除非對 TCP/IP 底層很有瞭解。

以上給你最一些參考。
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-07-26 19:35:01 IP:61.67.xxx.xxx 未訂閱
的確由 A 發送會有風險,不過我是土法練鋼,當 B,C,D,E連上  A 時,我利用 A.TIdTcpServer 取得 PeerIP資料,然後存入一個資料庫中,而且 A 是Terminal Server, B,C,D,E進入T/S執行A程式時,並非執行一支共用的 A.EXE ,而是我將 A.EXE 分發到 B,C,D,E四個檔案夾中, 若是B連入會執行 B的 A.EXE, 其他同理,所以B的A.EXE 會取得 B 的peerIP資料,而絕不會取到C的資料,然後將B的peerIP存入資料庫(資料庫是B,C,D,E共用), 當B 完成工作要求 A 要送出檔案時,我從 B 的 A.EXE中取出 B 的 PeerIP,然後送訊息到 B, 此時 B 有一支 B.EXE 的接收程式,收到後 B 再對 A 下接收指令,最後 A 接收到指令再傳檔到 B 電腦,我好像瘋了哦!
理論上這段流程確實可行,而且我也實作出來,只是這當中還有很多問題,例如 A.EXE被關閉或B.EXE被關閉時,兩端該如何得知等等的問題,有點頭大!

我在這方面認知其實還是很粗淺的,不若wameng版主功力高深,不知有沒有這個機會向wameng版主指點一二。
===================引 用 wameng 文 章===================
基本上 B,C,D,E 都使用浮動IP,那麼 A 如何定位發送,會送錯對象吧。
所以我認為由 A 去主動發送是有風險的,顯然不適用的。

最近我也在研究這個部分。
我最後決定是使用 HTTPSERVER? ,Web Server 為自寫。MultiThread ADO 處理。
具有檔案續傳。同時可用於上傳或下傳或傳遞自訂命令。已經搞出來了。

FTP 我覺得死板。
TCP 有點風險,除非對 TCP/IP 底層很有瞭解。

以上給你最一些參考。
編輯記錄
P.D. 重新編輯於 2007-07-26 19:37:21, 註解 無‧
danny
版主


發表:100
回覆:522
積分:595
註冊:2002-03-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-07-27 11:32:12 IP:211.76.xxx.xxx 訂閱
P.D.兄說的是否為下圖的架構 ?
如果是的話 FTP 可能無法滿足你的需求, 建議用 TCP or HTTP 的方式可能比較簡單, 依你的case安全性應該不太需要考慮(如果有更好), 簡易的HASH或加解密應該就夠用了.
至於浮動IP的問題可以去申請 NO-IP(http://www.no-ip.com) 變成固定的網址, 撥接連線端只要執行no-ip的程式就會註冊進新的浮動IP位置, 但網址是固定的, 如: B.no-ip.org, C.no-ip.org, D.no-ip.org, E.no-ip.org 等
另外, A.EXE被關閉或B.EXE被關閉時的問題, 可以用 ping 的方式或自定command來確定 A.EXE 或 B.EXE 是否被關閉(Timeout判斷), 不然就要寫成 COM 的方式呼叫A.EXE 或B.EXE執行.



------
將問題盡快結案也是一種禮貌!
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-07-27 17:13:47 IP:61.67.xxx.xxx 未訂閱
實在很佩服danny版主的耐力, 我就是很懶的畫流程圖, 才用文字描述, 我的需求正是如此, 目前我大致的上考量是採用tcp方式傳送
1.客戶端要申請DDNS或NOIP是不太可行, 企業主可能也不會SUPPPORT, 所以考量我基本上不列入
2.客戶端大多有接IP分享器, 一般都會擋掉PING的方式, 所以使用PING也不太能行的通
3.所以原則上我會使用 TIMER 定時去 CONNECT 偵測, 不過我有一個欵問, 如果B,C,D,E對 A(T/S)每一個小時重新
RECONNECT 一次, 會不會造成A 的執行緒及連接點會有累積無法釋放的結果, 而導致A CRASH
(PS:B,C,D,E 對 A 都是使用同一個PORT(假設10000)進入, 而我偵測的結果, 在 A端其實會自己產生另一個對應的PORT:1457, 1458, 1459,1460)
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-07-27 23:44:46 IP:218.18.xxx.xxx 訂閱
全部使用 TCP 当然没问题。我自己还写过全部使用 UDP 的档案传输,包括断点续传呢。

不过,自己在 TCP 上写档案传输,需要自己对档案进行分块、校验等等。如果这部分你不想自己写,还是可以采用 FTP 的。基本思路是自己有 TCP 来建立一条命令通道,需要传送档案的时候走 FTP。

假设 A 是固定IP,B是动态IP。
1. A 上建立一个 TCP SERVER,B 用一个 TCP CLIENT 去连接它,并保持连接。为了防止连接因为 B 的IP动态变化而失效,B 可以定时重新连接一下。

2. A、B都运行一个 FTP SERVER;当 A 需要发档案给B,A 从来自 B 的 TCP 连接可以知道 B 现在的 IP,A 用一个 FTP CLIENT 向该IP发起连接,如果连上,就上载档案;

3. B 需要发送档案给 A 的时候,直接用一个 FTP CLIENT 向 A 的 FTP SERVER 发起一个连接。

从上面的描述看来,似乎 A-B 之间的 TCP 连接,仅仅是用来让 A 知道 B 当前的 IP。如果 A、B 之间还有其它需要协调的事,可以通过这条 TCP 连接来做。
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-07-30 13:52:28 IP:61.67.xxx.xxx 未訂閱
感謝各位的討論,更感謝danny版主指導,最後給了pcplayer99的原因是,他指出了一個我一直未曾想到的方法,或許一直太陷入tcp傳輸的迷思,結果繞到死胡同,我現在的做法

1.A 起一支 TCPTS.EXE 專門做為 CLIENT 連入的程式,當有CLIENT連入時,會記錄該CLIENT的資料到一個TABLE上
同時 A 也起一支 FTP server, 建立 B,C,D,E 需要連入的帳號密碼
2.B 起一支 TCPCT.EXE, 提供每一電腦(B,C,D,E)在系統啟動後連接 TCPTS ,告知B,C,D,E 已經READY
3.有一支處理我要做的工作的程式,姑且命名為 RUN.EXE , 這支程式會處理真正的工作流程,最後產生所要的結果到 RESULT.DB檔中
4.將 RUN.EXE(由B,C,D,E進入 Termainal Server 執行)產生的RESULT.DB,透過 TVZIP套件壓縮後,送一個COMMAND給TCPCT知道
5.當 TCPCT收到 RUN.EXE 送來的指令後,由TCPCT 連入 A.FTP server 下載檔案
6.檔案下載成功或失敗,都由 TCPCT 送一個指令告知 RUN.EXE (RUN.EXE 內含 TIdTCPserver, TidTCPClient)檔案已下載狀況
7.接下來 RUN.EXE 收到 CT 指令,根據狀況顯示出訊息告知使用者知道
8.TCPCT 如果下載成功,接下來解壓縮,將內含的RESULT.DB 檔複製到指定的位置,並列印出來, 同時再將狀況回給 RUN.EXE
9.再由RUN.EXE 依據指令動作告知使用者完成的狀況

為何要將訊息不斷傳送來,傳送去,就是因為RUN.EXE 是在遠端主機(Terminal Server)上執行,與B,C,D,E 並非同一電腦,所以之前的溝通全部透過 RUN、TCPTS, TCPCT 三者之前的訊息傳遞來連繫
而我之前的迷思是,將 FTP sever 建置在B,C,D,E 上,由 A 連入後傳檔,但問題是有幾十台電腦(B,C,D,E,F....),每一台都要安裝FTPserver, 太累了,到時候維護也很恐怖,多虧pcplayer99兄提示,由 A 發訊號給 B,C,D,E ,再由B,C,D,E 去連 TS 的FTP server, 使我能得以順利完成這段接近瘋掉的程式,而後來我不使用 TCP方式傳送檔案,因為在更多次的實測當中,發現100的傳輪,有接近20%的機率,傳送過去的檔案是 OK或者BYTES數不符,檔案無法開啟,或者這是TCP底層控管上的問題,我也沒有這個能力可以去寫一個很漂亮的控制,所以不如使用已很完備的 FTP 方式。



系統時間:2024-05-03 10:17:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!