OOP Lab Task 6
De la WikiLabs
Required Tutorials
- The Object Oriented Paradigm; Classes and Objects
- Notions About the Java Language
- Writing and Executing a Java Program
- Java Syntax; A Program's Lexical Structure
- Coding Conventions
- Advanced Notions About Object Oriented Programming
- Java Application Programming Interface (API) (EN)
- Exception Handling
- Input/Output Streams
- Serialization
- Network Sockets
- Concurrent Programming - Threads
- Graphical User Interface (GUI) - Java Swing and JavaFX
Requirements
- Create a new project, named oop_lab6.
- For this task you need the previously designed classes Message, ClientPeer and Server, from OOP Lab Task 5. Copy their source .java files inside this package (letting NetBeans to refactor them or manually changing their package statement to make these classes part of this package).
- Modify the class Server so that its main method, instead of instantiating and running a ServerPeer object, instantiates a Client object. The Client arguments are a string (the name of the client on the server side) and the Socket reference, returned by the accept method called for the ServerSocket object.
- The class ClientPeer, which was used in the previous laboratory only to send messages, will manage a bidirectional connection, to send AND receive messages through it.
- Beside the ObjectOutputStream you need an input stream to read Message objects from. The following things need to be added to this class:
- a reference to an
ObjectInputStream
object; - The ObjectInputStream is a filter stream that encloses the input stream of the socket. You get the reference to that input stream using the Socket's method
getInputStream
. The filter stream will automatically deserialize the received Message objects. The input and output streams instantiations are done inside the constructor. - a method, named
readMessage
, without arguments, that returns the formatted string of the received Message object. Inside this method you read a single object from the input stream, using the proper method of the ObjectInputStream object, downcast the read object to a Message type and call the proper method of the received object to get the formatted string. This method may throw various exceptions of type IOException when called, and also an exception of type ClassNotFoundException when the downcasting is not possible. These are checked exceptions; though you do not catch them they need to be declared by the method. - The close method needs now to close both streams, the input stream and the output stream.
- a reference to an
- Remember! All fields are private, all methods are public.
- Beside the ObjectOutputStream you need an input stream to read Message objects from. The following things need to be added to this class:
Object o = ois.readOject();
if(o instanceof String){
String s = (String)o;
System.out.print(s);
}else{
System.out.print("The object is not a String!");
}
Submitting
- The assignment will be evaluated automatically by the Web-CAT platform.
- You could access the Web-CAT platform using the username and the password with which you acces the electronica.curs.pub.ro intranet.
- Select the OOP Lab Task 6 assignment.
- Submit your work as a single .zip archive (give it whatever name you choose) containing only the Java source code files.
- Attention Any deviation from these instructions may lead to the loss of the entire amount of points.