我正在使用 Java 开发 ServerSocket,我想知道,在客户端连接时,是否可以将客户端/套接字发送到另一个 ServerSocket。例如,客户端连接到 123.41.67.817(只是一个随机 IP),连接后,客户端会直接发送到例如 124.51.85.147(另一个随机 IP),当然还有一个端口。所以会发生什么的小 map 。
ServerSocket(监听连接)
客户端---> ServerSocket(客户端连接)
ServerSocket -> Client(Server says: Hello, I am going you to send you to 124.51.85.147)
客户端 -> ServerSocket(客户端说:OK!)
Client ---> ServerSocket(124.51.85.147)(Client gets send to a different server Socket)
ServerSocket(124.51.85.147) -> Client(Server2 says: Welcome!)
然后客户端停留在Server2(124.51.85.147)
这有可能吗?很抱歉问了这么长的问题。
最佳答案
Is this possible in any way.
没有。
在最基本的层面上,TCP/IP 连接是一对 IP 地址之间的对话。 TCP/IP 协议(protocol)中没有规定在对话中更改两个 IP 地址之一。
即使可以在 Java 级别(以某种方式)序列化 Socket
对象并将其发送到另一个程序(本地或远程),也无法更改 IP 地址潜在的对话;见上文。
历史注脚:很久以前(1980 年代)在一个遥远的国家(英国剑桥),有一个网络(The Cambridge Ring),其流协议(protocol) (BSP) 实现了一种称为“replug”的操作。如果 A 和 B 之间有 BSP 连接,B 和 C 之间有另一个连接,则 B 可以重新插入连接,以便 A 直接与 C 对话。引用:"The Cambridge Distributed Computer System" by R.M. Needham & A.J Herbert (附件 C)。
我从未在其他地方看到过重新插入操作。事实上,如果您考虑一下,它需要复杂的 3 次握手才能可靠地实现类似 replug 的操作。在 BSP 案例中,他们没有这样做……至少根据 Needham & Herbert 中的描述。
关于Java - 是否可以将客户端发送到另一台服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33851059/