2011-09-01 82 views
0

我有一個問題。 我想創建一個套接字偵聽器,但偵聽地址來自遠程服務器。遠程插座監聽器

所以說SERVER A有套接字監聽器。 服務器B(例如IP = 123.456.78.23:1970)具有監聽端口。

如果我創建這樣的插座(和執行它在服務器A):

IP EndPoint endpointIp = new IPEndPoint(123.456.78.23, 1970); 
this._socket = new Socket(endpointIp.AddressFamily, SocketType.Stream, ProtocolType.Tcp); 
this._socket.Bind(endpointIp); // crashes here 
this._socket.Listen(MaxPendingConnections); 

上綁定代碼的程序崩潰:「請求的地址不在其上下文中有效」。

如何在遠程端口上收聽?

謝謝!

+0

您無法偵聽另一臺服務器上的端口。您可能想要使用套接字連接到特定端口上的服務器。這是你需要/想要的嗎? – Icarus

+0

你好,這是我的設置。我有2臺服務器(使用biztalk),它們的工作方式類似於故障轉移設置,如果一臺服務器停機而另一臺服務器停機。我不知道你是否熟悉biztalk,但它是這樣的:2臺服務器與biztalk連接,在biztalk內部,我有一個監聽端口的監聽器。現在2臺服務器都有不同的IP地址,所以如果1臺服務器出現故障,另一臺服務器無法接管,因爲它正在監聽一個不存在的IP ..所以我想我會聽IP地址沒有鏈接到服務器,但這顯然是不可能的。 –

+1

你想實現的是負載均衡的一個子集。這將需要一個負載均衡器 - 一個路由器或另一個服務器(具有特殊應用),將坐在服務器A和B的前面。 –

回答

1

您不能從另一臺計算機上監聽一臺計算機的端口。 (因此消息「在這種情況下無效」)

你可以做的是編寫一個運行在SERVER B上的程序/服務並監聽端口,並使用Remoting或WCF編寫另一個在SERVER上運行的程序一個監視服務服務器B上,而不是試圖將端口上監聽服務器B.

1

您不能打開使用不同的服務器的IPEndPoint(基本IP和端口)的插座。你在問什麼是服務器欺騙 - 假裝是一個不同的服務器,並接收到它的流量。您需要將服務器A配置爲具有服務器B的IP,並確保路途中的每個路由器都可以通過此IP訪問服務器A.

編輯:繼您對原始問題發表評論後,您需要的是負載均衡器。爲了允許服務器B在服務器A死亡時接管,您必須具有接收所有流量並將其指向服務器A的路由器或服務器,然後如果它感覺到服務器A關閉,則會將所有流量重定向到服務器B.當然,因爲你已經在做負載均衡了,所以也可以使它成爲一個真正的負載平衡器,在兩個服務器都啓動時將流量轉發到兩臺服務器,當另一臺服務器出現故障時將流量轉發到另一臺服務器。

+0

這是可能與「虛擬IP地址」或類似的東西?我想如果我將相同的IP地址分配給兩臺服務器,我將遇到一些網絡問題。 –

+0

我已閱讀您對原始問題的評論並更新了答案。 –