I conceived a set of test files to depict each of the EIA scenarios mentioned. These files were transferred between a client and server and timings were made for each transfer. In this implementation, the client and server applications share the same code and are distinguished by a command-line switch.
Each transport implements the ICourseContentTransport interface. This interface is used to abstract away the differences among the various transports. The interface contains such methods as Connect(), Disconnect(), ReceiveFirstContent(), ReceiveNextContent(), etc. Each transport (e.g., RMICourseContentTransport) implements the abstract interface so the test program can simply run through the available transports and test them in exactly the same way.
In implementing the SocketCourseContentTransport(), which sends and receives content via TCP/IP sockets, I made certain to serialize the content using the standard Java serialization mechanism. I had read previously that Java's serialization mechanism had performance concerns of its own, and I didn't want to unduly penalize the RMI transport by using a different serialization mechanism when comparing. Thus, I avoided this issue by using the same serialization mechanism in all tested transports.
Each transport was tested using a set of files in directories, which denoted the respective scenarios. This allowed me to change the existing scenarios and add new ones easily throughout the development process.