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
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
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Multiple Client Chat server
 
Similar Threads
Chat Application
Chat across network
Can I use the same port
URGENT!!!
Compilation Error