2011-09-01 84 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

我已阅读您对原始问题的评论并更新了答案。 –