450 likes | 574 Views
Welcome Back!!!. Advanced Java Programming CSE 7345/5345/ NTU 531. Multithreaded/Sockets/Server. Office Hours: by appt 12:50pm-1:50pm SIC 353. Chantale Laurent-Rice. Welcome Back!!!. trice75447@aol.com. claurent@engr.smu.edu. News.
E N D
Welcome Back!!! Advanced Java ProgrammingCSE 7345/5345/ NTU 531 Multithreaded/Sockets/Server
Office Hours: by appt 12:50pm-1:50pm SIC 353 Chantale Laurent-Rice Welcome Back!!! trice75447@aol.com claurent@engr.smu.edu
News • Dr. El-Rewini is looking for someone with Java Swing background. • See Dr. El-Rewini or call Beth at SIC for more info
Server Objectives: Use server-side socket communication Understanding multithreading design Use methods of the thread class
Threads • There are two ways to create new Threads. • One is to declare a class to be a subclass of Thread, This subclass should override the run method of class Thread, and you can then allocate and start an instance of that class.
class CreateThread extends Thread{ CreateThread() { /* Do standard constructor initialization */ start(); } public void run() { /*Do the work this thread was created for */ }}
The other way to create a thread is to declare a class that implements Runnable interface. That class then implements the run method. An instance of the class can then be allocated (passed as an argument when you’ve creating a thread object).
class CreateThread implements Runnable{ Thread thread; CreateThread() {/* Do standard constructor initialization */thread = new Thread(this. “second”);thread.start(); } public void run() { /*Do the work this thread was created for */ }}
This exercise defines a thread for Applet1 which: listens and processes requests from Server
Requirements:Client workstations will communicate to the Server by sending a message(s).
2. Define a new Thread class that starts when you create an instance of it.
Creating a thread public class Applet1Thread extends Thread { }
4. Take a shot at coding the run() method. Since we are using I/O, the compiler will insist that a try/catch structure.
Do you want the while(true) read loop inside or outside the run? Why?
“answer the phone” 6. The The “answer the phone” function in Java Socket servers is provided by the ServerSocket class, so instantiate a ServerSocket Object called ss. Designate port 8200 on the ServerSocket constructor, the port number to be called by the Clients.
instantiate a ServerSocket Object called ss.open a serverSocket on applet 1
Since we are calling I/O methods, we will have to catch exceptions. Put the try/catch structure inside the while(true loop), and in the catch block print the Exception object but do not terminate.
If a client Socket fails during the join processing, we will simply print an error message and then ignore that Client looping back to the top of the while(true) to accept() the next Client that calls.
7. Now the Server can go into a while(true) loop where it answers the phone when a Client calls Parses the Clients’ first message (the joinrequest) Makes arrangements for continuing communication with the Client Returns to the top of the loop to process the next Client that calls.
8. At the top of the while(true) loop, enter the accept() method of the ServerSocket object. The Server thread will wait here until a Client calls. When a connection is made, the accept() method returns the reference to the Socket it has instantiated for this Client.
/* accept connection from server 2 */ Socket serverSocket2 = ss.accept ();
9. Once the Server has been created, instantiate to read and write from the Socket.
BufferedReader inServer2 = new BufferedReader (new InputStreamReader (serverSocket2.getInputStream () ) );PrintWriter outServer2 = new PrintWriter(serverSocket2.getOutputStream (), true );
perform the search for server 2 by calling the RString.getSearchData used by applet1
Now it’s time for the catch write the catch structure
catch (Exception e) { // Print a message }
catch (Exception e) { System.out.println (e.getMessage()); }