【问题标题】:Java - Is it possible to send a client to another server?Java - 是否可以将客户端发送到另一台服务器?
【发布时间】:2015-11-22 02:42:25
【问题描述】:

我正在使用 java 开发 ServerSocket,我想知道,在客户端连接后,是否可以将 Client/Socket 发送到另一个 ServerSocket。例如,客户端连接到 123.41.67.817(只是一个随机 IP),并且在连接后,客户端当然会直接发送到例如 124.51.85.147(另一个随机 IP)和一个端口。一张关于会发生什么的小地图。

ServerSocket(监听连接)

客户端 ---> ServerSocket(客户端连接)
ServerSocket -> Client(Server 说:你好,我要送你到 124.51.85.147)
客户端-> ServerSocket(客户端说:OK!)
Client ---> ServerSocket(124.51.85.147)(Client 被发送到不同的服务器 Socket)
ServerSocket(124.51.85.147) -> Client(Server2 说:欢迎!)
然后客户端停留在 Server2(124.51.85.147)

这是否有可能。抱歉问了这么长的问题。

【问题讨论】:

  • 正如咖啡所暗示的:是的,目标是可能的。您可以将客户端“重定向”到不同的服务器,或者您可以让客户端与多个服务器通信。您只是不能在同一个套接字上。正如 Stephen C 在下面所说:“TCP/IP 连接是一对 IP 地址之间的对话。”查看 Coffee 给你的链接,看看是否适用于你的场景:stackoverflow.com/questions/8854675
  • 好的,谢谢。我很快就会看看。
  • 基本上,您要做的就是告诉客户端新服务器的地址,然后让客户端连接到新服务器。有点像 HTTP 重定向,只是你必须自己编写代码。

标签: java sockets


【解决方案1】:

这有可能吗?

没有。

在最基本的层面上,TCP/IP 连接是一对 IP 地址之间的对话。 TCP/IP 协议中没有规定可以在对话过程中更改两个 IP 地址之一。

即使可以在 Java 级别(以某种方式)序列化 Socket 对象并将其发送到另一个程序(本地或远程),也无法更改基础对话的 IP 地址;见上文。


历史脚注:很久以前(1980 年代),在一个遥远的国家(英国剑桥),有一个网络(剑桥环),其流协议 (BSP) 实施了一种称为“重新插入”的操作。如果 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 中的描述。

【讨论】:

  • 我会在 90 分钟内发布它,因为这是我的限制。_.
  • @Stephen C - 这是"XY Problem" 的一个很好的例子。 OP的具体问题的答案是“否”。但是让他提出这个问题的"use case" 几乎可以肯定是几个好的、可行的解决方案。
  • @paulsm4 - 这是真的。但是,没有关于用例是什么的线索。这个问答本身就很有用(IMO)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多