100% found this document useful (1 vote)
89 views

A Simple Client

This document describes a simple client/server example and a multithreaded chat client/server example in Java. The simple client/server example has a client that reads from standard input and sends it to an echo server. The server echoes the input back to the client. The multithreaded chat client/server uses two threads - one for reading from the server and one for reading from standard input. The chat server spawns a new thread for each client to allow simultaneous conversations.

Uploaded by

Anuja Khamitkar
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
89 views

A Simple Client

This document describes a simple client/server example and a multithreaded chat client/server example in Java. The simple client/server example has a client that reads from standard input and sends it to an echo server. The server echoes the input back to the client. The multithreaded chat client/server uses two threads - one for reading from the server and one for reading from standard input. The chat server spawns a new thread for each client to allow simultaneous conversations.

Uploaded by

Anuja Khamitkar
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 6

A simple Client/Server example

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);

} } }

A multithreaded Client/Server example


This is a multithreaded chat application. The client uses two threads to interact with the server and with the standard input. The server uses a separate thread for every client. It spawns a new client thread every time a new connection from a client is established. The chat client This is the multithreaded chat client. It uses two threads: one to read the data from the standard input and to sent them to the server, the other to read the data from the server and to print them on the standard output.
//Example 25 import java.io.*; import java.net.*; public class MultiThreadChatClient implements Runnable{ // // // // Declaration section clientClient: the client socket os: the output stream is: the input stream Socket clientSocket = null; PrintStream os = null; DataInputStream is = null; BufferedReader inputLine = null; boolean closed = false;

static static static static static

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

Socket clientSocket = null; ServerSocket serverSocket = null;

// 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.

class clientThread extends Thread{ DataInputStream is = null;

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){}; } }

You might also like