java - 多服务器发现 - Java/Android

标签 java android udp broadcast

我有一个可以存在多个服务器的应用程序。有很多关于如何使用 UDP 发现服务器的示例,但似乎这只适用于单个服务器。

如果存在多个响应会怎样?它们是否排队、损坏(带有 UDP 陷阱)或其他原因?

我想了解如何从 Android 设备发送的 UDP 广播中接收多个响应。如果这不可行,是否有任何其他推荐的 Android 客户端多服务器发现方法..

谢谢

最佳答案

我会先发一个数据包给所有你想问的服务器是否在,然后让所有服务器响应。既然你想知道如何接收包裹,我会这样做:

long responseTimeout = 4000;
long start = System.currentTimeMillis();
while(true){
    long now = System.currentTimeMillis();
    if(now - start < responseTimeout){
        datagramSocket.setSoTimeout((int) (responseTimeout - (now - start));
    }else{
        break;
    }
    try{
        datagramSocket.receive(packet);
        addOnlineServer(packet.getAddress());
    }catch(SocketTimeoutException e){
        break;
    }
}

您的 android 客户端应等待响应一段时间,并将收到的包的每个 ip 添加到在线服务器列表中。

当然,当您使用 UDP 时,某些包可能会丢失,但这就是您得到的。如果您想确保没有包丢失,请改用 TCP。

关于java - 多服务器发现 - Java/Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20810928/

相关文章:

java - ProGuard - 仅保持资源处于 Activity 状态

java - Spring Security,PasswordEncoder 的问题

android - onActivityResult Intent 数据不正确

android - google 放弃了 Eclipse 作为开发工具?

java - DatagramSocket 随机停止接收 DatagramPackets

java - 点对点文件传输的协议(protocol)推荐

java - Spring-MVC 中的 JSP 渲染 HTML

java - 如何记录堆栈跟踪 aws elastic beanstalk 以快速解决客户错误

android - 始终将项目放置在回收者 View 的顶部

Java执行crc检查(将bytearray除以bytearray)