그래서 RMI를 사용하여 Java에서 클라이언트/서버 쌍을 만들었습니다. 요점은 클라이언트에서 서버로 메시지를 보내고 얼마나 많은 메시지를 받았는지와 잃어버린 메시지의 수를 출력하는 것입니다 (UDP와 비교하면 왜 RMI를 잃을 지 기대하지 않습니다).마지막 메시지를 보낸 후 Java RMI RemoteException
어쨌든, 코드를 작성, 모든게 잘 작동하는 것, 나는 서버에 바인딩하고 메시지를 보내, 서버가 모두 받고 결과를 출력합니다.
문제는 클라이언트에서 마지막 메시지를 보낸 후에 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에서 메시지를 보내고 다음과 같이
클라이언트 측에서 메시지를 보내기위한 코드입니다.
서버에서 결과를 인쇄 한 후 클라이언트에서 적절한 응답을 기다리지 않고 일찍 종료 될 수있는 System.exit()을 즉시 호출합니다.
내가 크게 감사 할 수 있도록 도와 주시고, 더 많은 정보가 필요하시면 알려 주시면 기꺼이 도와 드리겠습니다.
미리 감사드립니다.
예외의 스택 추적을 표시 할 수 있습니까? – Tudor