1 answer

In java write a simple 1-room chat server that is compatible with the given client code.

Question:

In java write a simple 1-room chat server that is compatible with the given client code.

9 public class Client private static String addr; private static int port; private static String username; 14 private static

9 public class Client private static String addr; private static int port; private static String username; 14 private static iter> currenthriter new AtomicReference>(null); public static void main(String[] args) throws Exception [ addr -args[]; port Integer.parseInt (args[1]); username-args[21 Thread keyboardHandler new Thread(Main: handlekeyboardInput); 18 19 while (true) [ try (Socket socket -new Socket (addr, port) println(" CONNECTED!; Printwriter writer new Printwriter(socket.getoutputStreamO); writer.println(username); writer.flush); currenthriter.set(writer); BufferedReader reader new BufferedReader(new InputStreamReader (socket.getinputStreamO); String line; while ((line-reader . readLine()) != null) { 31 receiveMsg(line); catch (Exception ex) [ ex.printStackTrace); Thread.sLeep(1_88); 35 36 private static void receiveMsg(String line) String[] partsline.split(":", 2); String content parts[1], String usernameparts[e]; System . out . printf("%s: %s\n", username, content); 5 private static void sendMsg (String line) [ try while (true) [ try Printwriter writer currentiiriter.get(); writer println(line); writer.flush); catch (Exception ex) [ Thread.sLeep (58); 56 57 catch (InterruptedException ex) [ //This should never happern ex.printStackTrace); private static void handleKevboardInput) BufferedReader reader new BufferedReader(new InputStreamReader(System.in)); String line; while (true) [ try while ((line reader . readLine()) != null) { sendsg(line); 68 78 72 catch (Exception ex) [ ex.printStackTrace); 73 75 private static void println(Object o) 1 System.err.println(o);

Answers

i have 5 steps for chat server

Step 1: A simple server that will accept a single client connection and display everything the client says on the screen. If the client user types ".bye", the client and the server will both quit.


Step 2: A server as before, but this time it will remain 'open' for additional connection once a client has quit. The server can handle at most one connection at a time.

Step 3: A server as before, but this time it can handle multiple clients simultaneously. The output from all connected clients will appear on the server's screen.

Step 4: A server as before, but this time it sends all text received from any of the connected clients to all clients. This means that the server has to receive and send, and the client has to send as well as receive


Step 5: Wrapping the client from step 4 into a very simple GUI interface but not changing the functionality of either server or client.

The client is implemented as an Applet, but a Frame would have worked just as well (for a stand-alone program).

Step 1: Simple, one-time Server

import java.net.*; import java.io.*;  public class ChatServer {  private Socket          socket   = null;    private ServerSocket    server   = null;    private DataInputStream streamIn =  null;     public ChatServer(int port)    {  try       {  System.out.println("Binding to port " + port + ", please wait  ...");          server = new ServerSocket(port);            System.out.println("Server started: " + server);          System.out.println("Waiting for a client ...");           socket = server.accept();          System.out.println("Client accepted: " + socket);          open();          boolean done = false;          while (!done)          {  try             {  String line = streamIn.readUTF();                System.out.println(line);                done = line.equals(".bye");             }             catch(IOException ioe)             {  done = true;             }          }          close();       }       catch(IOException ioe)       {  System.out.println(ioe);        }    }    public void open() throws IOException    {  streamIn = new DataInputStream(new BufferedInputStream(socket.getInputStream()));    }    public void close() throws IOException    {  if (socket != null)    socket.close();       if (streamIn != null)  streamIn.close();    }    public static void main(String args[])    {  ChatServer server = null;       if (args.length != 1)          System.out.println("Usage: java ChatServer port");       else          server = new ChatServer(Integer.parseInt(args[0]));    } }

The Simple Client corresponding to the previous server (and to step 2 and step 3 servers as well):

import java.net.*; import java.io.*;  public class ChatClient {  private Socket socket              = null;    private DataInputStream  console   = null;    private DataOutputStream streamOut = null;     public ChatClient(String serverName, int serverPort)    {  System.out.println("Establishing connection. Please wait ...");       try       {  socket = new Socket(serverName, serverPort);          System.out.println("Connected: " + socket);          start();       }       catch(UnknownHostException uhe)       {  System.out.println("Host unknown: " + uhe.getMessage());       }       catch(IOException ioe)       {  System.out.println("Unexpected exception: " + ioe.getMessage());       }       String line = "";       while (!line.equals(".bye"))       {  try          {  line = console.readLine();             streamOut.writeUTF(line);             streamOut.flush();          }          catch(IOException ioe)          {  System.out.println("Sending error: " + ioe.getMessage());          }       }    }    public void start() throws IOException    {  console   = new DataInputStream(System.in);       streamOut = new DataOutputStream(socket.getOutputStream());    }    public void stop()    {  try       {  if (console   != null)  console.close();          if (streamOut != null)  streamOut.close();          if (socket    != null)  socket.close();       }       catch(IOException ioe)       {  System.out.println("Error closing ...");       }    }    public static void main(String args[])    {  ChatClient client = null;       if (args.length != 2)          System.out.println("Usage: java ChatClient host port");       else          client = new ChatClient(args[0], Integer.parseInt(args[1]));    } }

h_line.gif


Step 2: Many Time Server, One Client (Client is as before)

import java.net.*; import java.io.*;  public class ChatServer implements Runnable {  private Socket       socket = null;    private ServerSocket server = null;    private Thread       thread = null;    private DataInputStream  streamIn  =  null;     public ChatServer(int port)    {  try       {  System.out.println("Binding to port " + port + ", please wait  ...");          server = new ServerSocket(port);            System.out.println("Server started: " + server);          start();       }       catch(IOException ioe)       {  System.out.println(ioe);        }    }    public void run()    {  while (thread != null)       {   try          {  System.out.println("Waiting for a client ...");              socket = server.accept();             System.out.println("Client accepted: " + socket);             open();             boolean done = false;             while (!done)             {  try                {  String line = streamIn.readUTF();                   System.out.println(line);                   done = line.equals(".bye");                }                catch(IOException ioe)                {  done = true;  }             }             close();          }          catch(IOException ie)          {  System.out.println("Acceptance Error: " + ie);  }       }    }    public void start()    {  if (thread == null)       {  thread = new Thread(this);           thread.start();       }    }    public void stop()    {  if (thread != null)       {  thread.stop();           thread = null;       }    }    public void open() throws IOException    {  streamIn = new DataInputStream(new                          BufferedInputStream(socket.getInputStream()));    }    public void close() throws IOException    {  if (socket != null)    socket.close();       if (streamIn != null)  streamIn.close();    }    public static void main(String args[])    {  ChatServer server = null;       if (args.length != 1)          System.out.println("Usage: java ChatServer port");       else          server = new ChatServer(Integer.parseInt(args[0]));    } }

h_line.gif

Step 3: Multi-Server handling Multi-Client (Client as before)

import java.net.*; import java.io.*;  public class ChatServer implements Runnable {  private ServerSocket     server = null;    private Thread           thread = null;    private ChatServerThread client = null;     public ChatServer(int port)    {  try       {  System.out.println("Binding to port " + port + ", please wait  ...");          server = new ServerSocket(port);            System.out.println("Server started: " + server);          start();       }       catch(IOException ioe)       {  System.out.println(ioe); }    }    public void run()    {  while (thread != null)       {  try          {  System.out.println("Waiting for a client ...");              addThread(server.accept());          }          catch(IOException ie)          {  System.out.println("Acceptance Error: " + ie); }       }    }    public void addThread(Socket socket)    {  System.out.println("Client accepted: " + socket);       client = new ChatServerThread(this, socket);       try       {  client.open();          client.start();       }       catch(IOException ioe)       {  System.out.println("Error opening thread: " + ioe); }    }    public void start()                   { /* no change */ }    public void stop()                    { /* no change */ }    public static void main(String args[]){ /* no change */ } }  import java.net.*; import java.io.*;  public class ChatServerThread extends Thread {  private Socket          socket   = null;    private ChatServer      server   = null;    private int             ID       = -1;    private DataInputStream streamIn =  null;     public ChatServerThread(ChatServer _server, Socket _socket)    {  server = _server;  socket = _socket;  ID = socket.getPort();    }    public void run()    {  System.out.println("Server Thread " + ID + " running.");       while (true)       {  try          {  System.out.println(streamIn.readUTF());          }          catch(IOException ioe) {  }       }    }    public void open() throws IOException    {  streamIn = new DataInputStream(new BufferedInputStream(socket.getInputStream()));    }    public void close() throws IOException    {  if (socket != null)    socket.close();       if (streamIn != null)  streamIn.close();    } }  

h_line.gif

Step 4: A Simple but functional, text based chat server/client

import java.net.*; import java.io.*;  public class ChatServer implements Runnable {  private ChatServerThread clients[] = new ChatServerThread[50];    private ServerSocket server = null;    private Thread       thread = null;    private int clientCount = 0;     public ChatServer(int port)    {  try       {  System.out.println("Binding to port " + port + ", please wait  ...");          server = new ServerSocket(port);            System.out.println("Server started: " + server);          start(); }       catch(IOException ioe)       {  System.out.println("Can not bind to port " + port + ": " + ioe.getMessage()); }    }    public void run()    {  while (thread != null)       {  try          {  System.out.println("Waiting for a client ...");              addThread(server.accept()); }          catch(IOException ioe)          {  System.out.println("Server accept error: " + ioe); stop(); }       }    }    public void start()  { /* as before */ }    public void stop()   { /* as before */ }    private int findClient(int ID)    {  for (int i = 0; i < clientCount; i++)          if (clients[i].getID() == ID)             return i;       return -1;    }    public synchronized void handle(int ID, String input)    {  if (input.equals(".bye"))       {  clients[findClient(ID)].send(".bye");          remove(ID); }       else          for (int i = 0; i < clientCount; i++)             clients[i].send(ID + ": " + input);       }    public synchronized void remove(int ID)    {  int pos = findClient(ID);       if (pos >= 0)       {  ChatServerThread toTerminate = clients[pos];          System.out.println("Removing client thread " + ID + " at " + pos);          if (pos < clientCount-1)             for (int i = pos+1; i < clientCount; i++)                clients[i-1] = clients[i];          clientCount--;          try          {  toTerminate.close(); }          catch(IOException ioe)          {  System.out.println("Error closing thread: " + ioe); }          toTerminate.stop(); }    }    private void addThread(Socket socket)    {  if (clientCount < clients.length)       {  System.out.println("Client accepted: " + socket);          clients[clientCount] = new ChatServerThread(this, socket);          try          {  clients[clientCount].open();              clients[clientCount].start();               clientCount++; }          catch(IOException ioe)          {  System.out.println("Error opening thread: " + ioe); } }       else          System.out.println("Client refused: maximum " + clients.length + " reached.");    }    public static void main(String args[]) { /* as before */ } } 
import java.net.*; import java.io.*;  public class ChatServerThread extends Thread {  private ChatServer       server    = null;    private Socket           socket    = null;    private int              ID        = -1;    private DataInputStream  streamIn  =  null;    private DataOutputStream streamOut = null;     public ChatServerThread(ChatServer _server, Socket _socket)    {  super();       server = _server;       socket = _socket;       ID     = socket.getPort();    }    public void send(String msg)    {   try        {  streamOut.writeUTF(msg);           streamOut.flush();        }        catch(IOException ioe)        {  System.out.println(ID + " ERROR sending: " + ioe.getMessage());           server.remove(ID);           stop();        }    }    public int getID()    {  return ID;    }    public void run()    {  System.out.println("Server Thread " + ID + " running.");       while (true)       {  try          {  server.handle(ID, streamIn.readUTF());          }          catch(IOException ioe)          {  System.out.println(ID + " ERROR reading: " + ioe.getMessage());             server.remove(ID);             stop();          }       }    }    public void open() throws IOException    {  streamIn = new DataInputStream(new                          BufferedInputStream(socket.getInputStream()));       streamOut = new DataOutputStream(new                         BufferedOutputStream(socket.getOutputStream()));    }    public void close() throws IOException    {  if (socket != null)    socket.close();       if (streamIn != null)  streamIn.close();       if (streamOut != null) streamOut.close();    } } 
import java.net.*; import java.io.*;  public class ChatClient implements Runnable {  private Socket socket              = null;    private Thread thread              = null;    private DataInputStream  console   = null;    private DataOutputStream streamOut = null;    private ChatClientThread client    = null;     public ChatClient(String serverName, int serverPort)    {  System.out.println("Establishing connection. Please wait ...");       try       {  socket = new Socket(serverName, serverPort);          System.out.println("Connected: " + socket);          start();       }       catch(UnknownHostException uhe)       {  System.out.println("Host unknown: " + uhe.getMessage()); }       catch(IOException ioe)       {  System.out.println("Unexpected exception: " + ioe.getMessage()); }    }    public void run()    {  while (thread != null)       {  try          {  streamOut.writeUTF(console.readLine());             streamOut.flush();          }          catch(IOException ioe)          {  System.out.println("Sending error: " + ioe.getMessage());             stop();          }       }    }    public void handle(String msg)    {  if (msg.equals(".bye"))       {  System.out.println("Good bye. Press RETURN to exit ...");          stop();       }       else          System.out.println(msg);    }    public void start() throws IOException    {  console   = new DataInputStream(System.in);       streamOut = new DataOutputStream(socket.getOutputStream());       if (thread == null)       {  client = new ChatClientThread(this, socket);          thread = new Thread(this);                             thread.start();       }    }    public void stop()    {  if (thread != null)       {  thread.stop();            thread = null;       }       try       {  if (console   != null)  console.close();          if (streamOut != null)  streamOut.close();          if (socket    != null)  socket.close();       }       catch(IOException ioe)       {  System.out.println("Error closing ..."); }       client.close();         client.stop();    }    public static void main(String args[])    {  ChatClient client = null;       if (args.length != 2)          System.out.println("Usage: java ChatClient host port");       else          client = new ChatClient(args[0], Integer.parseInt(args[1]));    } } 
import java.net.*; import java.io.*;  public class ChatClientThread extends Thread {  private Socket           socket   = null;    private ChatClient       client   = null;    private DataInputStream  streamIn = null;     public ChatClientThread(ChatClient _client, Socket _socket)    {  client   = _client;       socket   = _socket;       open();         start();    }    public void open()    {  try       {  streamIn  = new DataInputStream(socket.getInputStream());       }       catch(IOException ioe)       {  System.out.println("Error getting input stream: " + ioe);          client.stop();       }    }    public void close()    {  try       {  if (streamIn != null) streamIn.close();       }       catch(IOException ioe)       {  System.out.println("Error closing input stream: " + ioe);       }    }    public void run()    {  while (true)       {  try          {  client.handle(streamIn.readUTF());          }          catch(IOException ioe)          {  System.out.println("Listening error: " + ioe.getMessage());             client.stop();          }       }    } }  

h_line.gif

Stage 5: Chat client moved to very simple GUI interface

import java.net.*; import java.io.*; import java.applet.*; import java.awt.*; public class ChatClient extends Applet {  private Socket socket              = null;    private DataInputStream  console   = null;    private DataOutputStream streamOut = null;    private ChatClientThread client    = null;    private TextArea  display = new TextArea();    private TextField input   = new TextField();    private Button    send    = new Button("Send"), connect = new Button("Connect"),                      quit    = new Button("Bye");    private String    serverName = "localhost";    private int       serverPort = 4444;     public void init()    {  Panel keys = new Panel(); keys.setLayout(new GridLayout(1,2));       keys.add(quit); keys.add(connect);       Panel south = new Panel(); south.setLayout(new BorderLayout());       south.add("West", keys); south.add("Center", input);  south.add("East", send);       Label title = new Label("Simple Chat Client Applet", Label.CENTER);       title.setFont(new Font("Helvetica", Font.BOLD, 14));       setLayout(new BorderLayout());       add("North", title); add("Center", display);  add("South",  south);       quit.disable(); send.disable(); getParameters(); }    public boolean action(Event e, Object o)    {  if (e.target == quit)       {  input.setText(".bye");          send();  quit.disable(); send.disable(); connect.enable(); }       else if (e.target == connect)       {  connect(serverName, serverPort); }       else if (e.target == send)       {  send(); input.requestFocus(); }       return true; }    public void connect(String serverName, int serverPort)    {  println("Establishing connection. Please wait ...");       try       {  socket = new Socket(serverName, serverPort);          println("Connected: " + socket);          open(); send.enable(); connect.disable(); quit.enable(); }       catch(UnknownHostException uhe)       {  println("Host unknown: " + uhe.getMessage()); }       catch(IOException ioe)       {  println("Unexpected exception: " + ioe.getMessage()); } }    private void send()    {  try       {  streamOut.writeUTF(input.getText()); streamOut.flush(); input.setText(""); }       catch(IOException ioe)       {  println("Sending error: " + ioe.getMessage()); close(); } }    public void handle(String msg)    {  if (msg.equals(".bye"))       {  println("Good bye.

Press RETURN to exit ..."); close(); } else println(msg); } public void open() { try { streamOut = new DataOutputStream(socket.getOutputStream()); client = new ChatClientThread(this, socket); } catch(IOException ioe) { println("Error opening output stream: " + ioe); } } public void close() { try { if (streamOut != null) streamOut.close(); if (socket != null) socket.close(); } catch(IOException ioe) { println("Error closing ..."); } client.close(); client.stop(); } private void println(String msg) { display.appendText(msg + "\n"); } public void getParameters() { serverName = getParameter("host"); serverPort = Integer.parseInt(getParameter("port")); } }

.

Similar Solved Questions

1 answer
The loading on the bookshelif is distributed as shown. Determine the magnitude of the equivalent resultant...
The loading on the bookshelif is distributed as shown. Determine the magnitude of the equivalent resultant location, measured from point 2 lb/ft 3.5 lb/ft 2.75 ft 4 ft 1.5 ft...
1 answer
When placed 1.14 m apart, the force each exerts on the other is 11.8 N and...
When placed 1.14 m apart, the force each exerts on the other is 11.8 N and is repulsive. What is the charge on each? Enter your answers in ascending order separated by comma Constants 1 Periodic Table Two small nonconducting spheres have a total charge of 930 Submit Previous Answers Reovest Answer X...
1 answer
田 ntegral Calculator McDonald's t; New d'opbox Robin Cheg a 758) Mr. Raja(2018: D pertect Romeo...
田 ntegral Calculator McDonald's t; New d'opbox Robin Cheg a 758) Mr. Raja(2018: D pertect Romeo 201t Spring 2014,pdf F Dropbor. ENGR 21 Sign in Download A musical instrument is formed by putting a string of length 0.6Um ana mass per length μ = 0.00 under tension above a sound tube ...
1 answer
Suppose Stuart Company has the following results related to cash flows for 2018: Net Income of...
Suppose Stuart Company has the following results related to cash flows for 2018: Net Income of $7,700,000 Decrease in Accounts Payable of $900,000 Decrease in Accounts Receivable of $300,000 Decrease in Debt of $600,000 Depreciation Expenses of $1,100,000 Purchases of Property, Plant, & Equipmen...
1 answer
Introduction to healthcare management third edition Sharon B Buchbinder Why is it important to develop multiple...
Introduction to healthcare management third edition Sharon B Buchbinder Why is it important to develop multiple scenarios for the futurecast chapter 5...
1 answer
3. Award: 30.00 points “Blast it!” said David Wilson, president of Teledex Company. “We’ve just lost...
3. Award: 30.00 points “Blast it!” said David Wilson, president of Teledex Company. “We’ve just lost the bid on the Koopers job by $3,000. It seems we’re either too high to get the job or too low to make any money on half the jobs we bid.” Teledex Company manufact...
1 answer
Doxazosin is an antihypertensive drug of the alpha-1 adrenergic blocker type. If a patient is taking...
Doxazosin is an antihypertensive drug of the alpha-1 adrenergic blocker type. If a patient is taking 10 mg/day and the supply consists entirely of 100 2-mg tablets, for how many days will the patient’s supply of doxazosin tablets last?...
1 answer
Study the nucleotide sequences of wild type and its mutant gene Wild type: GAACCATG Mutant: GAACATG...
Study the nucleotide sequences of wild type and its mutant gene Wild type: GAACCATG Mutant: GAACATG This mutation can best be called: Study the nucleotide sequences of wild type and its mutant gene below. Wild type: GAACCATG Mutant: GAACATG The mutation can best be called: Study the nucleotide seque...
1 answer
Describe the government’s involvement in EHRs( electronic health record)
Describe the government’s involvement in EHRs( electronic health record)...
1 answer
John, a 30-year-old male, married and the father of a two-year-old daughter, is diagnosed as brain...
John, a 30-year-old male, married and the father of a two-year-old daughter, is diagnosed as brain dead after a motorcycle accident. Mary, his wife, arrives at the hospital and signs the papers for multiple organ procurement and makes one additional request—that her deceased husband’s sp...
1 answer
-0.0001211 Use the model (t)-20e for radiocarbon dating to answer the question. A sample from a...
-0.0001211 Use the model (t)-20e for radiocarbon dating to answer the question. A sample from a mummified bull was taken from a certain place. The sample shows that 86% of the carbon-14 still remains. How old is the sample? Round to the nearest year. The sample is approximately years old....
1 answer
Please let me know the best answer to this Previous Page Next Page Page 10 of...
Please let me know the best answer to this Previous Page Next Page Page 10 of 75 Question 10 (4 points) ✓ Saved Blood pressure measurements on adult males 30-39 years of age were obtained in a survey of a representative sample of Twin Cities households. To compare the frequency of hypertensio...
1 answer
5.80 is not the answer i dont kmow why, it shows is wrong any help why??...
5.80 is not the answer i dont kmow why, it shows is wrong any help why?? <Homework 5 on Chapter 16 Problem 16.74 - Enhanced - with Feedback Codeine (C18H2NO3) is a weak organic base. A 5.0 x 10M solution of codeine has a pH of 9.95 Part A You may want to reference (Pages 691 - 693) Section 16....
1 answer
How do you solve #log_2(x+2) + log_2(x+6)=5#?
How do you solve #log_2(x+2) + log_2(x+6)=5#?...
1 answer
You are considering the risk-return profile of two mutual funds for invastment. The relatively risky fund...
You are considering the risk-return profile of two mutual funds for invastment. The relatively risky fund promises an expected return of 11 1% with a standard deviation of 14.7%. The relatively less risky fund promises an tandard deviation of 4% and 6%, respectively Assume that the returns are appro...
1 answer
"we basically know nothing about how life on Earth originated from 3.5 billion years ago" assume...
"we basically know nothing about how life on Earth originated from 3.5 billion years ago" assume that one of your friends said this and you remember learning something different in your bio 21 class. how would you respond using scientific evidence? To fully answer this question, you need to ...
1 answer
2,3, 6, 7 1. Without matrices, solve the following system using the Gaussian elimination method +...
2,3, 6, 7 1. Without matrices, solve the following system using the Gaussian elimination method + 1 + HP 6x - Sy- -2 2. Consider the following linear system of equation 3x 2 Sy- (a) Write the augmented matrix for this linear system (b) Use row operations to transform the augmented matrix into row.ec...