我有一个问题。 我想创建一个套接字侦听器,但监听地址来自远程服务器。
所以说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 :(得分:1)
您无法在另一台计算机上收听端口。 (因此消息“在此上下文中无效”)
您可以做的是编写一个在SERVER B上运行并侦听该端口的程序/服务,并使用Remoting或WCF编写在监视您的服务的SERVER A上运行的另一个程序服务器B,而不是试图侦听服务器B上的端口。
答案 1 :(得分:1)
您无法使用其他服务器的IPEndPoint
(基本上是IP和端口)打开套接字。您要问的是服务器欺骗 - 伪装成不同的服务器并接收发往它的流量。您需要将服务器A配置为具有服务器B的IP,并确保每个路由器都可以通过此IP到达服务器A.
修改:在对原始问题发表评论后,您需要的是负载均衡器。为了允许服务器B在服务器A死机时接管,您必须拥有接收所有流量的路由器或服务器并将其定向到服务器A,然后如果它感觉到服务器A关闭则将所有流量重定向到服务器B.当然,既然你已经在进行负载平衡,那么也可以使它成为一个真正的负载均衡器,在两个服务器都启动时将流量转发到两个服务器,并在另一个服务器发生故障时将流量转发到剩余的服务器。