2010-11-30 77 views

回答

3

通常,您正在創建一個「客戶端/服務器」類型的應用程序。快速Google搜索「indy客戶端服務器示例」會得到很多結果,其中包括:http://www.devarticles.com/c/a/Delphi-Kylix/A-Real-World-Client-Server-Application-in-Delphi/

實際上,當您使用私有IP地址的防火牆和NAT時,這會變得複雜得多。你將不得不考慮你的應用程序如何繞過或通過這些類型的技術。

+0

+1對於一劑現實。防火牆,代理,NAT。 – 2010-11-30 20:24:48

+1

如果兩個程序都是由用戶直接控制的,互相擁有對方的IP,並且想要直接對話,那不是客戶/服務器;這是點對點的,而使它工作的技術是不同的。 – 2010-11-30 21:19:10

2

您不必使用Indy組件,只需要處理通過網絡進行通信的任何內容。任何HTTP或套接字網絡堆棧都可以。 Indy是Delphi Win32的事實標準。

要進行網絡通信,您需要在機器A上創建一個偵聽器對象或服務,並在機器B上創建一個發送者對象,以便將一條網絡消息從A發送到B.要將消息從B發送到A,您將還需要一個反向路徑 - 共有4個對象執行雙向通信。一些對象包裝器在內部隱藏了這個細節。我不記得Indy是否隱瞞了這一點。

如果您的計算機使用通用TCP/IP協議來加工通信(如HTTP),它可能會最容易。這將使得通過任意用戶之間經常存在的防火牆和代理獲得連接變得更加容易。爲了避免與任何一臺機器上運行的任何HTTP Web服務發生衝突,您應該使用IP地址爲192.168.1.10:12345的自定義端口號,而不是標準的HTTP Web服務器端口80.這是大多數IM客戶做的。

3

與斯科特說的相似,我認爲你最大的問題是讓他們互相交談。我家裏的電腦通過一臺路由器,它阻止來自Internet的所有傳入連接請求(即請求在兩臺計算機之間開始對話)。我的電腦可以發送連接請求OUT,並以這種方式開始對話,但除非您修改路由器(端口轉發),否則我的計算機無法接收連接請求。

您需要一個服務器連接到兩個人,然後可以來回中繼消息。爲了變得非常棘手,一旦與服務器建立連接,兩臺計算機可以直接聯繫,但涉及UDP數據包和一些聰明的魔法。

相關問題