Итак, я создал пару клиент / сервер в Java, используя RMI. Суть в том, чтобы отправлять сообщения от клиента на сервер и распечатывать, сколько сообщений мы получили и сколько мы потеряли (я сравниваю это с UDP, поэтому не спрашивайте, почему я ожидаю потерять что-либо с RMI).
Так или иначе, написав код, кажется, все работает нормально, я привязываюсь к серверу и отправляю сообщения, сервер получает их все и выводит результаты.
Единственная проблема в том, что после того, как я отправил последнее сообщение от клиента, он выдает RemoteException, и я понятия не имею, почему.
Мое единственное предположение, что сервер выключил кулак, поэтому он сообщает мне, что я больше не могу связаться с сервером (т.е. моя переменная iRMIServer теперь недопустима).
Забавно, я думал, что клиент сначала отключится, потому что он завершает работу после отправки сообщений. Причина, по которой он может не завершиться первым, заключается в том, что ему приходится ждать ответа (ACK) от сервера, чтобы подтвердить получение сообщения ??
Возможно, в это время, когда сервер отвечает, чтобы сообщить нам, что все в порядке, сервер отключается, и мы не можем подключиться к нему снова.
Код для отправки сообщений на стороне клиента выглядит следующим образом:
try {
iRMIServer = (RMIServerI) Naming.lookup(urlServer);
// Attempt to send messages the specified number of times
for(int i = 0; i < numMessages; i++) {
MessageInfo msg = new MessageInfo(numMessages,i);
iRMIServer.receiveMessage(msg);
}
} catch (MalformedURLException e) {
System.out.println("Errpr: Malformed hostname.");
} catch (RemoteException e) {
System.out.println("Error: Remote Exception.");
} catch (NotBoundException e) {
System.out.println("Error: Not Bound Exception.");
}
Таким образом, это отправляет сообщения с 0-999, если я выбираю 1000 сообщений для отправки.
После распечатки результатов с сервера я сразу вызываю System.exit (), что может привести к преждевременному завершению работы без ожидания соответствующих ответов от клиента?
Если вы можете помочь, я буду очень признателен, и если вам понадобится дополнительная информация, я с удовольствием предоставлю.
Заранее спасибо.