The aim is to build a system which allows a school pupil to
practise multiple choice tests in math. Design and implement a RMI-based Client / Server
communication system in Java, which will do the following:
c1. Connect to server via client_stub.
c2. Read and display the prompt message sent (see step s2 in server) by the server.
c3. Receives and displays the first math question plus three possible answers from
c4. User then selects and inputs only one answer and the client program sends the
answer to the server. This process is repeated three times to complete all 3
questions from the server Questions database
c5. After the test is over the client accepts and displays the test results and score
from the server.
s0. [Initialization] Create a RMI-based server which implements a test interface
[url removed, login to view] for a client connection
[url removed, login to view] a client connection is accepted send an acknowledgement (a welcome
message) as a sting of text.
s3. From Questions database, server sends the first test questions plus three
possible answers to the client.
s4. Receives the answer from the client. Stores and evaluates the answer. This
process is repeated three times.
s5. After that the server sends all results and score to the client.
s6. Close the connection to the client and then loop back and wait for another
Q1: (A + B)*(A+B)
1. A*A + B*B
2. A*A +A*B + B*B
3. A*A +2*A*B + B*B (correct)
Q2: (A + B)*(A - B)
1. A*A + 2*B*B
2. A*A - B*B (correct)
3. A*A -2*A*B + B*B
Q3: sin(x)*sin(x) + cos(x)*cos(x)
1. 1 (correct)
Note: All the communication between the Client and the Server should be in the form of
Here are a few tips/thoughts to help you with this assignment:
· You must use the three questions from Questions database (see above).
· Define the remote methods to allow the client to send the answers to the server.
· Implement these methods as a remote object.
· Write a client to invoke the remote methods.
· Use the rmic program to produce a stub and a skeleton.
· Use the rmiregistry tool to register the server.
Defining the Interface
In this coursework, firstly you define the server methods. The server receives and reads
the list of answers selected by the client. Then it checks that this answer is valid
(distinct numbers in the range 1-3):
· If not, return an error message to the client.
Page 3 of 4
· If yes, check answers and see if the client has answered correctly, then
return the score to the client.
The server is comprised of an interface and a class. The interface provides the
definition for the methods that can be called from the client. Essentially the interface
defines the client's view of the remote object. The class provides the
implementation. Define these methods in a Java TestInfo interface. Derive the
interface from the Remote class or from [url removed, login to view] interface (The
interface must extend from java.rmi.Remote. All the method declarations must
include the throws [url removed, login to view] clause).
Implementing the Remote Objects on the Server
Write the TestInfoImpl class that implements the TestInfo interface and the
TestServer class that creates an object and registers it on the server.
1. Write the TestInfoImpl class that contains the actual methods with questions and
to receive the answers.
2. Derive the class from the UnicastRemoteObject class
3. Create a TestServer class with a method that creates an object. Register this
object with the RMI remote object registry, name and bind it to a port using the
Naming class and the bind() or rebind() method.
Programming the Client
Produce the TestClient class that locates the server and invokes the remote methods.
The command to start the client will be
$ java TestClient rmi://machine/remote_object
Where the URL refers to the registry(usually on the same machine that the server runs
on, probably localhost).
Retrieve the remote object using the Naming class, by passing the use of the registry to
the lookup() method. Then make the remote method call on this object.
Producing the Distributed Objects
Finally, compile and run the distributed objects.
1. Compile all the classes you have written.
2. Your Java RMI programs are only a part of the application. It uses two other pieces
of code called the stub and the skeleton. These reformat the method parameters and
encapsulate them into a RMI data unit. This process is called marshalling. Run the
command rmic TestInfoImpl to generate the stub and the skeleton.
3. Launch the registry rmiregistry. Be sure to run the registry in the RMI server
directory that contains the stub and skeleton.
4. Run the server and the client on a same machine and directory. Then try to run the
client and the server on two different machines.
*.java source code
Write a report on the design and implementation of your solution and answers, showing
code and results:
(i) a class diagram outlining the class structure for your proposed
(ii) a set of summary tables describing the fields, constructors and methods for
(iii) a print out of the Java source code of your complete program.
A small number of marks are reserved for extensions. These could be to have GUI on
client and server sides which send the range of possible choices to the client and
validate entries, or to be able to specify a security manager which determines its
security policy by using the RMISecurityManager.
I would like the programming to be very simple in its design i would also like it to be well commented.