Как удаленно завершить работу Java Сервер RMI

Проблема в вызове функции strlen!

strlen(str)

Потому что вы не установили терминатор в конце строки.

Добавление следующего кода после цикла инициализации устранит проблему:

str[235435]='\0';
7
задан Clayton 27 October 2008 в 18:51
поделиться

2 ответа

В случае, если у любого есть подобная проблема, я выяснил ответ сам. Вот является мой выход () методом:

public void exit() throws RemoteException
{
    try{
        // Unregister ourself
        Naming.unbind(mServerName);

        // Unexport; this will also remove us from the RMI runtime
        UnicastRemoteObject.unexportObject(this, true);

        System.out.println("CalculatorServer exiting.");
    }
    catch(Exception e){}
}
16
ответ дан 6 December 2019 в 09:23
поделиться

На самом деле просто отмена регистрации и немедленный вызов System.exit не завершает работу чисто. Он в основном разрывает соединение, прежде чем сообщить клиенту, что сообщение было завершено. Что работает, так это запустить небольшой поток, который завершает работу системы, например:

public void quit() throws RemoteException {
  System.out.println("quit");
  Registry registry = LocateRegistry.getRegistry();
  try {
    registry.unbind(_SERVICENAME);
    UnicastRemoteObject.unexportObject(this, false);
  } catch (NotBoundException e) {
    throw new RemoteException("Could not unregister service, quiting anyway", e);
  }

  new Thread() {
    @Override
    public void run() {
      System.out.print("Shutting down...");
      try {
        sleep(2000);
      } catch (InterruptedException e) {
        // I don't care
      }
      System.out.println("done");
      System.exit(0);
    }

  }.start();
}

Поток необходим для того, чтобы позволить чему-то случиться в будущем, но все еще возвращается из метода выхода.

4
ответ дан 6 December 2019 в 09:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: