Я пытаюсь создать концепцию распределенной системы.
Мне нужно принять 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-го ответа.