java - 在 LAN 中保持客户端更新的最佳方式 - Java 网络

标签 java networking udp multicast lan

我正在开发一个多客户端应用程序,它将与 LAN 中的服务器连接。

每个客户端都可以发送更改服务器状态的命令。 我将称之为“ServerStatus”,它是一个具有一些值的对象。

现在,如果 ServerStatus 发生变化,所有客户端都应该立即知道。 我的想法是这样工作:

服务器每秒向所有监听客户端发送一个多播,其中包含 ServerStatus 的 versionNumber。因此,如果新客户端加入多播组,他将查看他的 versionNumber 是否相同。 如果没有,客户端将通过UDP询问当前的ServerStatus版本。

当客户端发送更改 ServerStatus 的命令时, 服务器将其当前(和新的)ServerStatus 发送到同一个多播组, 而在另一个线程中,ServerStatus的版本号仍然每秒共享。

你们认为这是处理这个问题的好方法吗? 或者这会导致太多问题,...等等

最佳答案

如果新的 ServerStatus 无法到达客户端,会发生什么情况?在我看来,在向客户端发送新状态时不应该使用 UDP,而应该使用可靠的协议(protocol)。因此,如果您打算对此使用多播,您将必须获得 reliable multicast protocol .

<小时/>

另一方面,您可能更喜欢客户端与服务器同步:

  • 每次客户端进入网络时,它都会询问服务器其statusid(如果不相同,服务器会向他发送 ServerStatus),并且客户端还会注册新的状态更改事件。 (TCP)

  • 离开时,客户端可以发送 UNREGISTER 消息 (UDP)。

  • 每次 ServerStatus 更改时,服务器都会将新的 ServerStatus 发送到每个注册的客户端。收到新的 Serverstatus 后,客户端将向服务器发送类似 ack 的消息。(TCP)

  • 如果服务器未收到确认,则相关客户端将被取消注册(因为这意味着客户端已在未取消注册的情况下离开网络 - 由于错误)。

希望这有帮助..

关于java - 在 LAN 中保持客户端更新的最佳方式 - Java 网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13013709/

相关文章:

java - 读取文件时忽略新行

java - 如何使用 Java 发送 M-SEARCH 查询

java - tcp服务器和客户端的问题

java - 将 Java 字符串转换为 Windows-1258

java - 抽象枚举的 sun.reflect.Reflection 处理中可能存在错误?

java - Android 对手电筒模式的支持

web-services - 如何使 localhost(XAMPP) 从任何计算机访问?

java - "Lost"UDP 数据包(JBoss + DatagramSocket)

linux - 如何在scapy中发送多个数据包

c - 我是否需要在客户端使用不同的套接字来监听和发送?