是否可以重新绑定已绑定的套接字?

时间:2012-06-29 12:06:12

标签: java sockets networking

这就是我想要做的事情:

+--------+                          +--------+
|        |                          |        |
| Server |---+                  +---| Client |
|        |   |                  |   |        |
+--------+   |                  |   +--------+
             |                  |
+--------+   |   +--------+     |   +--------+
|        |   |   |        |     |   |        |
| Server |---+---+  Proxy +-----+---+ Client |
|        |   |   |        |     |   |        |
+--------+   |   +--------+     |   +--------+
             |                  |
+--------+   |                  |   +--------+
|        |   |                  |   |        |
| Server |---+                  +---| Client |
|        |                          |        |
+--------+                          +--------+  

服务器将连接到代理服务器,然后客户端将连接代理服务器并请求重定向到其中一个连接的服务器。例如Client1希望重定向到Server3。我的问题是,一旦客户端连接,我想将其反弹到另一个服务器。绑定后,您无法反弹套接字。反正有吗?

2 个答案:

答案 0 :(得分:2)

鉴于套接字API的假设,你是正确的,连接一直保持绑定,直到它被关闭。

您的两个选项是

  1. 在客户端和服务器中编写元协议,使其具有使用多个套接字模拟跨越多个服务器的持久连接的虚拟连接(硬)
  2. 拥有一个智能代理,可以终止客户端套接字并根据需要连接到服务器,并假装它不存在于其他端点(根据您的代理服务,不太困难或已经为您完成。

答案 1 :(得分:2)

我会永远拥有代理商< - >客户端连接。如果需要连接到另一台服务器,只需关闭代理服务器< - > Server1连接并创建另一个Proxy< - > Server2上。这样,客户端就不必断开连接,并且与另一台服务器的重新连接将是无缝的。