Как обработать несколько запросов UPD в распределенной системе? - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь создать концепцию распределенной системы. Мне нужно принять 3 ответа UDP от трех разных отправителей.

Я могу обрабатывать по одному за раз. Но как я могу обработать 3 запроса за раз, чтобы я мог показать лучший из 2, которые совпадают с 3 запросом, и показать его клиенту.

Код UPD для обработки 1 запроса приведен ниже в форме UDPsend () и UDPReply ().

// Это метод отправки, который написан на 3 разных клиентах

 static String UdpSendData(int serverPort,String sSendOutput)
        {
            DatagramSocket aSocket = null;
            String messageReceived = null;
            try {
            String keywordSent="";
                keywordSent=sSendOutput;
                aSocket = new DatagramSocket();
                byte[] mes = (keywordSent).getBytes();
                InetAddress aHost = InetAddress.getByName("192.168.137.1");
                DatagramPacket request = new DatagramPacket(mes, (keywordSent).length(), aHost, serverPort);
                aSocket.send(request);
                byte[] buffer = new byte[1000];
                DatagramPacket reply = new DatagramPacket(buffer, buffer.length);

                aSocket.receive(reply);
                messageReceived=new String(reply.getData());
                System.out.println(messageReceived);

            } catch (SocketException e) {
                System.out.println("Socket: " + e.getMessage());
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("IO: " + e.getMessage());
            } finally {
                if (aSocket != null)
                    aSocket.close();
            }
            return messageReceived;

    } 

//This is the receive method in which i wanted to have 3 replies


 static void UPDRecieve() {
            DatagramSocket aSocket = null;
            try {
                aSocket = new DatagramSocket(7777);


                while (true) {
                    byte[] buffer = new byte[1000];
                    DatagramPacket request=null;

                     request= new DatagramPacket(buffer, buffer.length);
                    aSocket.receive(request);
                    String ReplyFromServer=new String(request.getData());               //Request received from server
                    DatagramPacket reply=null;
                    String Finalmessage="";
                    System.out.println(ReplyFromServer);
   byte[] finalmessage = Finalmessage.getBytes();
            reply= new DatagramPacket(finalmessage,Finalmessage.length(), request.getAddress(),request.getPort());
            aSocket.send(reply);

            }




        }
    catch (SocketException e) {
            System.out.println("Socket: " + e.getMessage());
        } catch (IOException e) {
            System.out.println("IO: " + e.getMessage());
        } finally {
            if (aSocket != null)
                aSocket.close();
        }

}

Мне нужно получить эти 3 ответа, но что, если один из них глючит или требует времени для выполнения, как бы я справился с ситуацией, если один не отвечает ни на что, а два других дали другое исполнение. В этом случае моя система остановится. Как бы я дождался выполнения всех 3-х, если они также задерживаются или также содержат ошибку. Если я получаю два ответа, мне нужно ждать 3-го, как мне ждать 3-го ответа.

...