远程套接字监听器

时间:2011-09-01 13:10:52

标签: c# sockets

我有一个问题。 我想创建一个套接字侦听器,但监听地址来自远程服务器。

所以说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);

程序在绑定代码上崩溃:“请求的地址在其上下文中无效”。

如何在远程端口上收听?

谢谢!

2 个答案:

答案 0 :(得分:1)

您无法在另一台计算机上收听端口。 (因此消息“在此上下文中无效”)

您可以做的是编写一个在SERVER B上运行并侦听该端口的程序/服务,并使用Remoting或WCF编写在监视您的服务的SERVER A上运行的另一个程序服务器B,而不是试图侦听服务器B上的端口

答案 1 :(得分:1)

您无法使用其他服务器的IPEndPoint(基本上是IP和端口)打开套接字。您要问的是服务器欺骗 - 伪装成不同的服务器并接收发往它的流量。您需要将服务器A配置为具有服务器B的IP,并确保每个路由器都可以通过此IP到达服务器A.

修改:在对原始问题发表评论后,您需要的是负载均衡器。为了允许服务器B在服务器A死机时接管,您必须拥有接收所有流量的路由器或服务器并将其定向到服务器A,然后如果它感觉到服务器A关闭则将所有流量重定向到服务器B.当然,既然你已经在进行负载平衡,那么也可以使它成为一个真正的负载均衡器,在两个服务器都启动时将流量转发到两个服务器,并在另一个服务器发生故障时将流量转发到剩余的服务器。