A Simple Client
A Simple Client
The client This is a simple client which reads from the standard input a line and sends it to the echo server. It keeps then reading from the socket till it receives the "Ok" from the server. Once it received that then it breaks.
//Example 23 import java.io.*; import java.net.*; public class client { public static void main(String[] args) { // // // // declaration section: clientClient: our client socket os: output stream is: input stream Socket clientSocket = null; DataInputStream is = null; PrintStream os = null; DataInputStream inputLine =null; // Initialization section: // Try to open a socket on port 2222 // Try to open input and output streams try { clientSocket = new Socket("ti.utm.md", 2222); os = new PrintStream(clientSocket.getOutputStream()); is = new DataInputStream(clientSocket.getInputStream()); inputLine = new DataInputStream(new BufferedInputStream(System.in)); } catch (UnknownHostException e) { System.err.println("Don't know about host"); } catch (IOException e) { System.err.println("Couldn't get I/O for the connection to host"); } // If everything has been initialized then we want to write some data // to the socket we have opened a connection to on port 2222 if (clientSocket != null && os != null && is != null) { try { // keep on reading from/to the socket till we receive the "Ok" from the server, // once we received that then we want to break. String responseLine; os.println(inputLine.readLine()); while ((responseLine = is.readLine()) != null) { System.out.println(responseLine); if (responseLine.indexOf("Ok") != -1) { break; } os.println(inputLine.readLine()); } // // // // clean close close close up: the output stream the input stream the socket
os.close(); is.close(); clientSocket.close(); } catch (UnknownHostException e) { System.err.println("Trying to connect to unknown host: " + e); } catch (IOException e) { System.err.println("IOException: " + e); } } } }
The server This is a simple echo server. As long as it receives data it echos that data back to the client appending them to the "From server :" string.
//Example 24 import java.io.*; import java.net.*; public class server { public static void main(String args[]) { // declaration section: // declare a server socket and a client socket for the server // declare an input and an output stream ServerSocket echoServer = null; String line; DataInputStream is; PrintStream os; Socket clientSocket = null; // Try to open a server socket on port 2222 // Note that we can't choose a port less than 1023 if we are not // privileged users (root) try { echoServer = new ServerSocket(2222); } catch (IOException e) { System.out.println(e); } // Create a socket object from the ServerSocket to listen and accept // connections. // Open input and output streams try { clientSocket = echoServer.accept(); is = new DataInputStream(clientSocket.getInputStream()); os = new PrintStream(clientSocket.getOutputStream()); // As long as we receive data, echo that data back to the client. while (true) { line = is.readLine(); os.println("From server: "+ line); } } catch (IOException e) { System.out.println(e);
} } }
public static void main(String[] args) { // The default port int port_number=2222; String host="localhost"; if (args.length < 2) { System.out.println("Usage: java MultiThreadChatClient \n"+ "Now using host="+host+", port_number="+port_number); } else { host=args[0]; port_number=Integer.valueOf(args[1]).intValue(); } // Initialization section: // Try to open a socket on a given host and port // Try to open input and output streams try { clientSocket = new Socket(host, port_number); inputLine = new BufferedReader(new InputStreamReader(System.in)); os = new PrintStream(clientSocket.getOutputStream()); is = new DataInputStream(clientSocket.getInputStream()); } catch (UnknownHostException e) { System.err.println("Don't know about host "+host); } catch (IOException e) { System.err.println("Couldn't get I/O for the connection to the host "+host); }
// If everything has been initialized then we want to write some data // to the socket we have opened a connection to on port port_number if (clientSocket != null && os != null && is != null) { try { // Create a thread to read from the server new Thread(new MultiThreadChatClient()).start(); while (!closed) { os.println(inputLine.readLine()); } // // // // Clean close close close up: the output stream the input stream the socket
os.close(); is.close(); clientSocket.close(); } catch (IOException e) { System.err.println("IOException: } } } public void run() { String responseLine;
" + e);
// Keep on reading from the socket till we receive the "Bye" from the server, // once we received that then we want to break. try{ while ((responseLine = is.readLine()) != null) { System.out.println(responseLine); if (responseLine.indexOf("*** Bye") != -1) break; } closed=true; } catch (IOException e) { System.err.println("IOException: " + e); } } }
The chat server This is a multithreaded chat server. It uses a separate thread for every client. It spawns a new client thread every time a new connection from a client is established. This client thread opens the input and the output streams for a particular client, ask the client's name, informs all the clients currently connected to the server about the fact that a new client has joined the chat room, and as long as it receive data, echos that data back to all other clients. When the client leaves the chat room this thread informs also all the clients about that and terminates.
//Example 26 import java.io.*; import java.net.*; public class MultiThreadChatServer{ // Declaration section: // declare a server socket and a client socket for the server // declare an input and an output stream
static static
// This chat server can accept up to 10 clients' connections static clientThread t[] = new clientThread[10];
public static void main(String args[]) { // The default port int port_number=2222; if (args.length < 1) { System.out.println("Usage: java MultiThreadChatServer \n"+ "Now using port number="+port_number); } else { port_number=Integer.valueOf(args[0]).intValue(); } // // // // Initialization section: Try to open a server socket on port port_number (default 2222) Note that we can't choose a port less than 1023 if we are not privileged users (root)
try { serverSocket = new ServerSocket(port_number); } catch (IOException e) {System.out.println(e);} // // // // // Create a socket object from the ServerSocket to listen and accept connections. Open input and output streams for this socket will be created in client's thread since every client is served by the server in an individual thread
while(true){ try { clientSocket = serverSocket.accept(); for(int i=0; i<=9; i++){ if(t[i]==null) { (t[i] = new clientThread(clientSocket,t)).start(); break; } } } catch (IOException e) { System.out.println(e);} } } } // // // // // // This client thread opens the input and the output streams for a particular client, ask the client's name, informs all the clients currently connected to the server about the fact that a new client has joined the chat room, and as long as it receive data, echos that data back to all other clients. When the client leaves the chat room this thread informs also all the clients about that and terminates.
PrintStream os = null; Socket clientSocket = null; clientThread t[]; public clientThread(Socket clientSocket, clientThread[] t){ this.clientSocket=clientSocket; this.t=t; } public void run() { String line; String name; try{ is = new DataInputStream(clientSocket.getInputStream()); os = new PrintStream(clientSocket.getOutputStream()); os.println("Enter your name."); name = is.readLine(); os.println("Hello "+name+" to our chat room.\nTo leave enter /quit in a new line"); for(int i=0; i<=9; i++) if (t[i]!=null && t[i]!=this) t[i].os.println("*** A new user "+name+" entered the chat room !!! ***" ); while (true) { line = is.readLine(); if(line.startsWith("/quit")) break; for(int i=0; i<=9; i++) if (t[i]!=null) t[i].os.println("<"+name+"> "+line); } for(int i=0; i<=9; i++) if (t[i]!=null && t[i]!=this) t[i].os.println("*** The user "+name+" is leaving the chat room !!! ***" ); os.println("*** Bye "+name+" ***"); // Clean up: // Set to null the current thread variable such that other client could // be accepted by the server for(int i=0; i<=9; i++) if (t[i]==this) t[i]=null; // close the output stream // close the input stream // close the socket is.close(); os.close(); clientSocket.close(); } catch(IOException e){}; } }