This is the server and the client program thatI wrote basically it gives u a good understanding of how sockets work in java .
/*This is the server for the MultiThreadedChatClient program thatI
wrote basically it gives u a good understanding of how sockets
work in java
Author: Mohammed Alfaaz
email:alfaaz@gmail.com
*/
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 Socket clientSocket = null;
static 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 = 8888;
if (args.length < 1)
{
System.out.println("Usage: java MultiThreadChatServer " +
"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 8888)
// Note that we can't choose a port less than 1023 if we are not
// privileged users (root)
try
{
serverSocket = new ServerSocket(port_number);
}// try
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
// can use a for loop to control the number of clients
// I have used the while so that we can have unlimited number of clients
while (true)
{
try
{
clientSocket = serverSocket.accept();
new clientThread(clientSocket, t).start();
break;
}// try
catch (IOException e)
{
System.out.println(e);
}
}
}
} // class
// 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(); // Recommends BufferedReader.readLine() method.
os.println("Hello " + name + " to our chat room.To 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)
{
};
}
}
/*This is the client for the MultiThreadedChatServer program thatI
wrote basically it gives u a good understanding of how sockets
work in java
Author: Mohammed Alfaaz
email:alfaaz@gmail.com
*/
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
static Socket clientSocket = null;
static PrintStream os = null;
static DataInputStream is = null;
static BufferedReader inputLine = null;
static boolean closed = false;
public static void main(String[] args)
{
// The default port
int port_number = 8888;
String host = "localhost";
if (args.length < 2)
{
System.out.println("Usage: java MultiThreadChatClient " +
"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 up:
// close the output stream
// close the input stream
// close the socket
os.close();
is.close();
clientSocket.close();
} catch (IOException e)
{
System.err.println("IOException: " + e);
}
}
}
public void run()
{
String responseLine;
// 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);
}
}
}
