【问题标题】:Java - How to simulate one server with multiple clients that communicate through that server?Java - 如何模拟具有多个通过该服务器进行通信的客户端的服务器?
【发布时间】:2013-11-02 16:08:05
【问题描述】:

我正在开发一个小型 Java 聊天应用程序,它可以在小型局域网上可靠地运行。
我的机器(笔记本电脑)中安装了 Windows 7。
我开发了一个服务器和一个客户端来代表(聊天信使)

如果服务器运行,那么任何客户端都可以运行并与服务器通信。
在运行服务器的机器上,也可以在同一台机器上运行一个客户端(client_1)与服务器通信。
如果我想运行第二个客户端(client_2)通过服务器与 client_1 通信。然后我必须在另一台机器上运行它(client_2)。

是否可以模拟两台机器或两个真实客户端在使用同一台机器时与服务器通信?

附录:
我只在开发阶段需要这个。我只是希望能够在同一台机器上进行开发和测试。但最终产品将按预期运行,即每个客户端将在单台机器上运行。不是编程逻辑问题。

【问题讨论】:

  • 将消息从 client_1 中继到 client_2。或者更一般地说,如果您计划让多个客户端(大概是您这样做)将每个客户端消息中继到 所有 客户端(包括发件人)。为此,您需要维护Collection 的客户端。
  • 多个客户端可以从一台计算机使用不同的端口连接到服务器,这就是多个浏览器选项卡的工作方式,您所要做的就是为不同的客户端分配不同的端口号。在我的一个项目中,我遇到了同样的问题,首先我在我的计算机上为客户端套接字搜索可用的空闲端口,然后在创建套接字实例时将该端口分配给客户端。它应该可以工作。

标签: java multithreading windows-7


【解决方案1】:

我能想到的最简单的解决方案:客户端应该使用“localhost”作为 inet 地址打开到服务器的套接字。然后你可以运行它们的多个实例。

new Socket("localhost", port);

【讨论】:

  • 这个我知道,但是在服务器端如何区分每一个呢?服务器需要区分它们,以便控制它们之间的通信,即每个客户端必须是唯一的。
  • 你有每个连接到服务器的客户端的IP地址和端口号来区分它们。
  • 好的,所以您需要客户端具有不同的 IP。我认为您唯一的机会是运行一些虚拟机。 @SauravKumar:你错了,每个客户都有127.0.0.1 地址。
  • @FabioCarello 我还提到了端口号和 IP 地址,当同一应用程序的多个实例要在同一台计算机上运行时,我们需要为每个实例和服务器提供不同的端口号,我们可以获取该端口号以区分每个客户端。
【解决方案2】:

考虑使用 VMWare,因为您可以在单个逻辑“计算机”网络中配置多个系统和虚拟 IP。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    相关资源
    最近更新 更多