2013-01-12 31 views
-2

我正在编写一个虚拟网络。
我有一个中央客户端类,它实现了我的整个网络,并允许向/从网络中的特定其他客户端发送/接收数据。我现在不想为使用网络的所有程序使用Client类的单个实例。我有一个处理传入数据包的程序的接口,以及一个用于发送的包装器,所以我会感谢另一个解决方案,而不是“运行本地TCP服务器”。使用单个类的实例的多个Java程序

我现在的问题是: 如何为所有使用Java的程序运行一个类的单个实例?

+1

问题是什么? – MrSmith42

+0

听起来像你应该创建一个通用的Java库,其中包含Client类,并添加到每个单独的Java程序的构建路径中......但是@ MrSmith42是对的,这是没有问题的。 –

+0

我很抱歉,问题是间接地在句子中“我现在不想为使用网络的所有程序使用客户端类的单个实例”。 – th3falc0n

回答

0

这可以通过使用Java中提供的RMI,RMI-IIOP或CORBA功能轻松完成。所提及的技术允许在单个机器(服务器)上创建一个对象实例,并将其作为远程接口导出到其他计算机(您说您需要网络)。在其他主机中,您将拥有一个具有与“真实”实例相同接口的存根类,并且可以调用其上的方法。这些调用将在您的仆人的单个实例上远程调用。可能会认为,这正是你所要求的。

从更新,更有趣的方法看,Google协议缓冲区看起来像是一件好事,但您需要使用协议缓冲区更多的自定义代码。 Web服务还允许导出界面,并且更适合通过防火墙(这里列出的其他方法更适合于在自己的服务器之间进行通信,您可以配置自己的想法)。

如果您需要确保只有一个程序实例在给定的操作系统上运行,则可以这样做:discussed in this question。如果你的程序正在监听固定端口,那么由于端口已被占用,二次可能无法正常启动;所有你需要的是当你试图绑定socked并终止时捕获异常。

+0

我想我的英语有点不对劲。我不想在网络中有单个实例。我不想在本地PC上使用我的网络客户端的单个实例。我实际上正在尝试编写一个像Tor这样的网络。 – th3falc0n

+0

谁阻止你拥有单个实例? – h22

+0

我不知道该怎么做:/ – th3falc0n