aspose file tools*
The moose likes Sockets and Internet Protocols and the fly likes Multiple Client Chat server Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Soft Skills this week in the Jobs Discussion forum!
JavaRanch » Java Forums » Java » Sockets and Internet Protocols
Bookmark "Multiple Client Chat server" Watch "Multiple Client Chat server" New topic
Author

Multiple Client Chat server

RajeshRr Rathod
Greenhorn

Joined: Oct 26, 2012
Posts: 1
Hello friends i am developing Multiple user chat server

which has the following Client and Server Programs

all is working fine but message send by client should be echo to selected user but i am not getting so ...........

Please anyone help me out........

ChatClient.java

// Importing required packages.
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;

/*
<applet code="ChatClient" width=400 height=400>
</applet>
*/

public class ChatClient extends Applet implements ActionListener
{
// Declaration of variables
String cmdStr;
String currLogin;
String logMesg;
String serverMess;

StringTokenizer readTokenizer;

Label loginLabel;
Label currLoginLabel;

TextField loginText;
TextField chatMessage;

Button logonButton;
Button sendButton;

TextArea chatTextArea;
java.awt.List loginList;

Panel loginPanel;
Panel mainPanel;
Panel chatPanel;
Panel messagePanel;

CardLayout c1;

BufferedReader in;
PrintStream out;

Socket servSocket;

Thread listUpdateThread;

ListMesgUpdate listMesgObj ;
SendMessage sendMessageObj;

public void init()
{
// Initialize the input and output streams
try
{
servSocket = new Socket("127.0.0.1", 1313);
in = new BufferedReader
(new InputStreamReader(servSocket.getInputStream()));
out = new PrintStream (servSocket.getOutputStream());
}
catch (Exception Excep)
{
System.out.println("Socket error on client " + Excep);
}

c1 = new CardLayout();

// The applet has a border layout.
setLayout(new BorderLayout());

// The main panel of card layout is added to the applet panel.
mainPanel = new Panel();
add(mainPanel, BorderLayout.CENTER);

// Create all the panels needed
loginPanel = new Panel();
chatPanel = new Panel();
messagePanel = new Panel();

mainPanel.setLayout(c1);

//Add cards to the main panel
mainPanel.add("card1",loginPanel);
mainPanel.add("card2",chatPanel);

loginLabel = new Label("Login");
loginText = new TextField(30);
logonButton = new Button("LOGON");
loginList = new java.awt.List(10,true);
chatMessage = new TextField(30);
sendButton = new Button("SEND");

sendMessageObj = new SendMessage();
sendButton.addActionListener(sendMessageObj);


// Adding components to the Login Panel.
loginPanel.add(loginLabel);
loginPanel.add(loginText);
loginPanel.add(logonButton);

//Add panel to the center of the card layout
logonButton.addActionListener(this);

c1.show(mainPanel,"card1");

chatPanel.setLayout(new BorderLayout());
chatTextArea = new TextArea(20,20);
chatPanel.add(chatTextArea, BorderLayout.CENTER);
chatPanel.add(loginList, BorderLayout.EAST);
messagePanel.add(chatMessage);
messagePanel.add(sendButton);
chatPanel.add(messagePanel, BorderLayout.SOUTH);
}

// The implementation code for the actionPerformed method
public void actionPerformed(ActionEvent actEvt)
{
// Get the name of the client logged in.
currLogin = loginText.getText();

//Printing the logged in username on the command prompt
//in the server window
System.out.println("Currlogin is: " + currLogin);

logMesg = "Login:" + currLogin;
out.println(logMesg);
System.out.println("logMesg is: " + logMesg);

listMesgObj = new ListMesgUpdate();
listMesgObj.start();
}

// Displaying the name of the client who has logged out.
public void destroy()
{
logMesg = "Logout: " + currLogin;
out.println(logMesg);
}


class ListMesgUpdate extends Thread
{
public void run()
{
// Declaring variables.
String chatMessage;
String loginName;
String sender;

while (true)
{
try
{
serverMess = in.readLine();
}
catch (Exception Excep)
{
System.out.println(Excep);
}

readTokenizer = new StringTokenizer(serverMess, ":");

// Storing the information from the client
cmdStr = readTokenizer.nextToken();

// Incase of new client logged in.
if (cmdStr.equals("NewLogin"))
{
//Testing
//System.out.println("This is where all logins have been deleted");

//remove all the logged in members
loginList.removeAll();

// Add the login names to the Tokenizer.
while (readTokenizer.hasMoreTokens())
{
loginName = readTokenizer.nextToken();
loginList.add(loginName);
}
}

if (cmdStr.equals("NewLoginMess"))
{
while (readTokenizer.hasMoreTokens())
{
loginName = readTokenizer.nextToken();
chatTextArea.append(loginName + " has logged in\n" );
}
}

if (cmdStr.equals("DelLogin"))
{
loginList.removeAll();

while (readTokenizer.hasMoreTokens())
{
loginName = readTokenizer.nextToken();
loginList.add(loginName);
}
}

if (cmdStr.equals("DelLoginMess"))
{
while (readTokenizer.hasMoreTokens())
{
loginName = readTokenizer.nextToken();
chatTextArea.append("Good Bye " + loginName + " \n" );
}
}

if (cmdStr.equals("ChatMess"))
{
chatMessage = readTokenizer.nextToken();
sender = readTokenizer.nextToken();
chatTextArea.append(sender + " " + "says: "+ chatMessage + "\n");
}

c1.show(mainPanel,"card2");
} // End of while.
} // End of run()
}// End of class ListMesgUpdate

class SendMessage implements ActionListener
{
public void actionPerformed(ActionEvent actEvt)
{
//Testing
System.out.println(chatMessage.getText());

// Declaring variables.
String createMess;
String[] selectList = new String[10];
selectList = loginList.getSelectedItems();

//Testing
System.out.println(selectList.length);

if (selectList.length > 0)
{
createMess = "SendMessage: " + chatMessage.getText() +": "+ currLogin;

for (int i = 0; i < selectList.length; i++)
{
createMess += ": " ;
createMess += selectList[i];
}
out.println(createMess);
} // End of the if construct.
} // End of the method actionPerformed().
} // End of class SendMessage
} // End of the class ChatClient


ChatServer.java
import java.util.*;
import java.net.*;
import java.io.*;

public class ChatServer
{
// Declaration of variables
private ServerSocket serverSock;
private Socket fromClient;

private static Vector loginNames;
private static Vector loginSocks;

public ChatServer()
{
try
{
// Login names and sockets are stored in two vectors
loginNames = new Vector();
loginSocks = new Vector();
// Instantiating the ServerSocket object and passing the port number as an // argument
serverSock = new ServerSocket(1313);
}
catch (Exception Excep)
{
System.out.println("Server start problem "+ Excep);
}
System.out.println("Server Started");

while (true)
{
try
{
fromClient = serverSock.accept();
System.out.println("Server:Client connected");
Connect con = new Connect(fromClient);
}
catch (Exception Excep)
{
System.out.println("Accept problem "+ Excep);
}
}
}// End of the method ChatServer()

public static void main(String args[])
{
// Calling the Constructor ChatServer()
new ChatServer();

}// End of main()

// Start of class Connect
class Connect extends Thread
{
// Declaration of variables
Socket listClientSocket;
PrintStream outPrintStream;
String stringFromClient;
String currentLogin;
String delLogin;
String cmdStr;
StringTokenizer readTokenizer;
Iterator myIterator;
String tmpNameList;
String tmpName;
String tmpMesg;
Socket fromClient;
boolean threadOk=true;
private PrintStream out;
private BufferedReader in;

// Defining the constructor Connect() which accepts the sockets as the parameter
public Connect(Socket fromClient)
{
this.fromClient = fromClient;

try
{
// Opening an Output stream to send the output to the client
out = new PrintStream(fromClient.getOutputStream());
// Opening an Input stream to accept the input from the client
in = new BufferedReader(new InputStreamReader
(fromClient.getInputStream()));
}
catch (Exception Excep)
{
System.out.println("Stream error");
}
// Starting the current thread
this.start();
}

public void run()
{
System.out.println("Server:thread started for "+fromClient);

while (threadOk)
{
try
{
// Accepting the input from the client
stringFromClient = in.readLine();
System.out.println("Server:" +stringFromClient);
/* Storing the client input into a variable of type StringTokenizer with ":" as a separator */
readTokenizer = new StringTokenizer(stringFromClient,":");

// Moving to the next element
cmdStr = readTokenizer.nextToken();

// If a new client has logged in
if (cmdStr.equals("Login"))
{
/* Move to the next element and store the name of the person logged in */
currentLogin = readTokenizer.nextToken();

// Add the loginnames to the vector
loginNames.add(currentLogin);

// Add the socket to the vector
loginSocks.add(fromClient);

// Moving through the vector i.e. Login names
myIterator = loginNames.iterator();
tmpName = "NewLogin";
tmpMesg = "NewLoginMess:"+currentLogin;

while (myIterator.hasNext())
{
tmpName += ":";
tmpName += (String)myIterator.next();
}

myIterator = loginSocks.iterator();

// Moving through the vector LoginSocks
while (myIterator.hasNext())
{
listClientSocket = (Socket)myIterator.next();
outPrintStream = new PrintStream
(listClientSocket.getOutputStream());
/* Passing the information about the new person who has logged in and the message to the clients */
outPrintStream.println(tmpName);
outPrintStream.println(tmpMesg);
}
}

// If any client has logged out
if (cmdStr.equals("Logout"))
{
delLogin = readTokenizer.nextToken();
/* Storing the element number of the client who has logged out into a variable */
int vecIndex = loginNames.indexOf((Object)delLogin);
int curIndex = loginSocks.indexOf((Object)fromClient);

if (vecIndex == curIndex)
threadOk = false;
// Remove the logged out client from the vector
loginNames.removeElementAt(vecIndex);
loginSocks.removeElementAt(vecIndex);
myIterator = loginNames.iterator();
tmpName = "DelLogin";
tmpMesg = "DelLoginMess:"+delLogin;

while (myIterator.hasNext())
{
tmpName += ":";
tmpName += (String)myIterator.next();
}
myIterator = loginSocks.iterator();
/* Send the information of the logged out client to the other clients */
while (myIterator.hasNext())
{
listClientSocket = (Socket)myIterator.next();
outPrintStream = new PrintStream
(listClientSocket.getOutputStream());
outPrintStream.println(tmpName);
outPrintStream.println(tmpMesg);
}
}
// If any client wants to chat
if (cmdStr.equals("SendMessage"))
{
// Store the message of the client
String mesg = readTokenizer.nextToken();

// Store the message of the sender
String sender = readTokenizer.nextToken();
String receiver;
Socket sendToSocket;

// Send the message to all the clients
while (readTokenizer.hasMoreTokens())
{
receiver = readTokenizer.nextToken();
int vecIndex =loginNames.indexOf((Object)receiver);
sendToSocket =(Socket)loginSocks.elementAt(vecIndex);
outPrintStream = new PrintStream(
sendToSocket.getOutputStream());
outPrintStream.println("ChatMess:"+ mesg+":"+sender);
}
}
}
catch (Exception Excep)
{
System.out.println("Inputstream problem "+ Excep);
}
}
}
}//Connect()
}//Class ChatServer

Vishal Shaw
Ranch Hand

Joined: Aug 09, 2012
Posts: 179
Hi,

I hardly doubt it that anyone would be interested in reading your code, by the way you presented it. Please edit it and usecodetags

Vishal


Programming is about thinking, NOT coding
 
jQuery in Action, 2nd edition
 
subject: Multiple Client Chat server