Results 1 to 20 of 20
  1. #1
    pappyj77 is offline Member
    Join Date
    Jul 2011
    Location
    kent, UK
    Posts
    47
    Rep Power
    0

    Default message passing in Client/Server Chat problem

    Hello, I am trying to send a message from one client to another through the server but I have run out of ideas on what to do. when the user selects a name on the userlist(JList), the user should send a message to the name selected. I have done a substantial amount of trials here and i have been on this pretty much a while now.... please help me. Thank you

    the code is quite bulky but i have tried to remove most irrelevant things away from it.

    The ServerChat.java
    Java Code:
    // Java core packages
         import java.io.*;
         import java.net.*;
         import java.util.*;
         import java.awt.*;
         import java.awt.event.*;
         import javax.swing.*;
    
    	public class ServerChat extends JFrame 
    	{
    	private ObjectInputStream input;
    	private	ObjectOutputStream output;
    	private JTextField enterField;
    	public static JTextArea displayArea;
    	private ServerSocket server;
    	private Socket connection;  
    	public static ServerThread c1[];
    	//private Client Cname;
    	protected static String clientList[];
    	private static int counter = 0;
    
    	public ServerChat()
    	{
    		super( "Server" );
    		Container container = getContentPane();
    		clientList = new String[100];
    		// create enterField and register listener
    		enterField = new JTextField();
    		enterField.setEnabled( false );
    		enterField.addActionListener(
    
    		new ActionListener() {
    			// send message to client
    			public void actionPerformed( ActionEvent event )
    			{
    				//sendData( event.getActionCommand() );
    			}
    		} // end anonymous inner class
    		); // end call to addActionListener
    
    		container.add( enterField, BorderLayout.NORTH );
    	
    		// create displayArea
    		displayArea = new JTextArea();
    		container.add( new JScrollPane( displayArea ), BorderLayout.CENTER );
    		setSize( 300, 150 );
    		setVisible( true );
    	}
    
    	public void runServer()
    	{
    		// set up server to receive connections;
    		// process connections
    		try {
    
    		// Step 1: Create a ServerSocket.
    		server = new ServerSocket( 5130, 100);
    		c1 = new ServerThread[100];
    
    		while ( true ) {
    
    			// Step 2: Wait for a connection.
    			waitForConnection();
    
    			c1[counter] = new ServerThread(connection,counter);	
    			c1[counter].start();
    			
    			++counter;
    
    			}
    		}
    		// process EOFException when client closes connection
    		catch ( EOFException eofException ) {
    		System.out.println( "Client terminated connection" );
    		}
    		// process problems with I/O
    		catch ( IOException ioException ) {
    		ioException.printStackTrace();
    		}
    	}
    	private void waitForConnection() throws IOException
    	{
    		displayArea.append( "\nWaiting for connection " );
    
    		// allow server to accept a connection
    		connection = server.accept();
    		
    		displayArea.append( "\nClient connected");
    		}
    	
    	public static void broadCast(String Cname)
    	{
    		for (int i=0;i<counter ; i++)
    		{
    			c1[i].sendData("."+Cname);
    		}
    	}
    
    	public static void main( String args[] )
    	{
    		ServerChat application = new ServerChat();
    		application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
    		application.runServer();
    	}
    	}
    The ServerThread.java

    Java Code:
    import java.io.*;
         import java.net.*;
         import java.awt.*;
         import java.awt.event.*;
         import javax.swing.*;
    
    
         public class ServerThread extends Thread 
         {
    	private Socket connection;
    	private ObjectOutputStream output;
    	private ObjectInputStream input;
    	private int counter;
    
    	public ServerThread(Socket con,int count)
    	{
    		connection = con;
    		counter = count;
    
    	}
    
    	public void run()
    	{
    			
    			try 
    			{
    					
    				getStreams();
    						
    				handShake();
    
    			
    				processConnection();
    				System.out.println("Hanshake Complete");
    				
    
    				//closeConnection();
    
    			}
    
    			// process EOFException when client closes connection
    		catch ( EOFException eofException ) {
    		System.out.println( "Client terminated connection" );
    		}
    
    		// process problems with I/O
    		catch ( IOException ioException ) {
    		ioException.printStackTrace();
    		}
    	}
    
    		private void getStreams() throws IOException
    		{
    		// set up output stream for objects
    		output = new ObjectOutputStream(connection.getOutputStream() );
    		// flush output buffer to send header information
    		output.flush();	
    		input = new ObjectInputStream(connection.getInputStream() );
    		}
    
    	private void handShake() throws IOException
    	{
    		String message;
    		try {
    			int i;
    			message = (String) input.readObject();
    			ServerChat.clientList[counter]= message;
    			ServerChat.displayArea.append( "\nClient connected : "+message);
    			
    			for (i=0; i<counter;i++ )
    			{
    				output.writeObject(ServerChat.clientList[i]);
    				output.flush();				
    
    			}
    			output.writeObject(".");
    			output.flush();
    			System.out.println("read message in S_Hanshake after try and for block = " +message);
    			ServerChat.broadCast(ServerChat.clientList[i]);
    	
    			}
    
    		 // catch problems reading from client
    		catch ( ClassNotFoundException classNotFoundException ) {
    			System.out.println( "\nUnknown object type received" );
    			}
    			catch ( IOException ioException ) {
    		ioException.printStackTrace();
    		}
    	}
    
    	public void sendData(String message )
    	{
    		
    		// send object to server
    		try {
    			output.writeObject( message );
    			output.flush();
    			//ServerChat.broadCast(ServerChat.clientList[i]);
    
    		}
    		catch ( IOException ioException ) {
    			System.out.println( "\nError writing object3" );
    		}	
    		//return message;
    	}
    	private void processConnection() throws IOException
    	{
    		// send connection successful message to client
    		String message = "";// = "SERVER>>> Connection successful [2]";
    		
    		try {
    
    			do{
    
    				message=( String ) input.readObject();
    				System.out.println("\n"+message);
    		
    			}while ( !message.equals( "TERMINATE" ) );
    
    		}
    		catch ( ClassNotFoundException classNotFoundException ) {
    			System.out.println( "\nUnknown object type received" );
    			}
    			catch ( IOException ioException ) {
    		ioException.printStackTrace();
    		}
    	}
    	
    	private void closeConnection() throws IOException
    	{
    		ServerChat.displayArea.append( "\nUser terminated connection" );
    		
    		output.close();
    		input.close();
    		connection.close();
    		}
    
         }
    The ClientChat.java

    Java Code:
    import java.io.*;
         import java.net.*;
         import java.awt.*;
         import java.awt.event.*;
         import javax.swing.*;
    
         public class  ClientChat extends JFrame {
    	private Toolkit toolkit; 
    	private JLabel msgLabel;
    	private JButton sendBtn;
    	private JTextArea genMsg;
    	public static JList userList;
    	private JTextField msgF;
    	private ObjectOutputStream output;
    	private ObjectInputStream input;
    	private Socket client;
    	private String chatServer;
    	private int serverport;
    	private String Client_name;
    	String value[];
    	int value_counter;
    
    	
    	public ClientChat( String host, int port,String C_Name){
    
    		// set server to which this client connects
    		chatServer = host;
    		serverport = port;
    		Client_name = C_Name;
    		value = new String [100];
    		value_counter=0;
    
    
    		toolkit = Toolkit.getDefaultToolkit();		
    		if(toolkit.getScreenSize().getWidth() > 600)
    			setSize(600, 605);
    		else
    			setSize((int)toolkit.getScreenSize().getWidth(),(int)toolkit.getScreenSize().getHeight() - 20);			
    			setResizable(false);
    			Dimension dimension = getSize();	
    			setLayout(new FlowLayout());
    
    			setTitle("FRESHER MARKETING COMPANY For "+ C_Name);		
    			addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { System.exit(0);}});
    
    			Container container = getContentPane();
    			container.setLayout(new FlowLayout());
    
    			// create an ImageIcon
    			ImageIcon banner =new ImageIcon("images\\defaultbanner.gif");  
    			JLabel bannerLabel = new JLabel(banner);
    			container.add(bannerLabel);		
    
    			// create General Message Screen
    			genMsg = new JTextArea(30,43);
    			genMsg.setEditable(false);
    			genMsg.setFont(new java.awt.Font("Times New Roman", 0, 12)); // NOI18N
    			container.add( new JScrollPane( genMsg ));
    			JPanel genMsgPanel = new JPanel();
    			genMsgPanel.setLayout(new BorderLayout());
    			genMsgPanel.add(new JScrollPane(genMsg), BorderLayout.EAST);
    			genMsgPanel.setBorder(BorderFactory.createLineBorder(Color.black));	
    			container.add(genMsgPanel);
    
    			// create Friend List View
    			userList = new JList();
    			userList.setPreferredSize(new Dimension(150,423));
    			userList.setFont(new java.awt.Font("Times New Roman", 0, 12)); // NOI18N
    			container.add(userList);
    			JPanel userListPanel = new JPanel();
    			userListPanel.setLayout(new BorderLayout());
    			userListPanel.add(userList, BorderLayout.CENTER);
    			userListPanel.setBorder(BorderFactory.createLineBorder(Color.black));	
    			container.add(userListPanel);
    
    			msgLabel = new JLabel ("Message:");
    			container.add(msgLabel);
    			JPanel msgFPanel = new JPanel();
    			msgFPanel.setLayout(new BorderLayout());
    			msgFPanel.add(new JScrollPane(msgLabel), BorderLayout.WEST);
    			container.add(msgFPanel);
    
    			// create Message Field
    			msgF = new JTextField(37);
    			msgF.setEnabled( true );
    			msgF.setText("");
    			msgF.requestFocus();
    			//msgF
    			msgFPanel.add(new JScrollPane(msgF), BorderLayout.CENTER);
    				
    			// create Send Button
    			sendBtn = new JButton ("Send1");
    			container.add(sendBtn);
    			sendBtn.addActionListener(
    				new ActionListener() {
    
    				// send message to server
    					public void actionPerformed( ActionEvent event )
    					{
    						//msgF.getText();
    						sendData( msgF.getText());
    						msgF.setText("");
    					}
    
    				} // end anonymous inner class
    				); // end call to addActionListener
    			setVisible( true );
    			msgFPanel.add(new JScrollPane(sendBtn), BorderLayout.EAST);
    
    		}
    	public void runClient()
    	{
    		// connect to server, get streams, process connection
    		try {
    		
    			// Step 1: Create a Socket to make connection
    
    			connectToServer();
    
    			// Step 2: Get the input and output streams
    			getStreams();
    
    			handShake();
    
    			// Step 3: Process connection
    			processConnection();
    
    			// Step 4: Close connection
    			//closeConnection();
    		}// server closed connection
    		catch ( EOFException eofException ) {
    			System.out.println( "Server terminated connection" );
    		}
    
    		// process problems communicating with server
    		catch ( IOException ioException ) {
    			ioException.printStackTrace();
    		}
    	}
    
    	private void connectToServer() throws IOException
    	{
    		genMsg.setText( "Attempting connection\n" );
    		System.out.println("Attempting connection\n");
    
    		// create Socket to make connection to server
    		client = new Socket(InetAddress.getByName( chatServer ), serverport );
    
    		// display connection information
    		genMsg.append( "Connected to: " +client.getInetAddress().getHostName() );
    	}
    
    	private void getStreams() throws IOException
    	{
    		// set up output stream for objects
    		
    		output = new ObjectOutputStream(client.getOutputStream() );
    
    		// flush output buffer to send header information
    		output.flush();
    		System.out.println("Got I/O streams");
    
    		// set up input stream for objects
    
    		input = new ObjectInputStream(client.getInputStream() );
    	}
    
    	private void handShake() throws IOException
    	{
    		String message;	
    
    		genMsg.append("\nMy name is: " +Client_name);
    		try {
    			output.writeObject(Client_name);
    			output.flush();
    
    			message = (String) input.readObject();
    
    			while ( !message.startsWith( "." ) )
    			{
    				
    				value[value_counter++] = message; 
    				message = (String) input.readObject();
    		
    			}
    			userList.setListData(value);			
    
    		}
    
    		// process problems sending object
    			catch ( IOException ioException ) {
    				genMsg.append( "\nError writing object1" );
    			}
    			 catch ( ClassNotFoundException classNotFoundException ) {
    				System.out.println( "\nUnknown object type received" );
    			}
    		}
    	private void processConnection() throws IOException
    	{
    		String message="";
    		// process messages sent from server
    	do {
    		// read message and display it
    	
    		try {
    
    			message = ( String ) input.readObject();
    			if (message.startsWith("."))
    				{
    					if(!message.equals("."+Client_name))
    					{
    					value[value_counter++] =message.substring(1); 
    					userList.setListData(value);
    					}
    				}
    			else
    				{
    					genMsg.append( "\n" + message );
    					genMsg.setCaretPosition(genMsg.getText().length() );
    				}
    			}
    			// catch problems reading from server
    			catch ( ClassNotFoundException classNotFoundException ) {
    			genMsg.append( "\nUnknown object type received" );
    			}
    			catch ( IOException ioException ) {
    			genMsg.append( "\nError writing object2" );
    			}
    
    		} while ( !message.equals( "SERVER>>> TERMINATE" ) );
    
    	} // end method process connection
    	
    	private void sendData( String message )
    	{
    		// send object to server
    		
    		try {
    		output.writeObject( userList.getSelectedValue() +": "+message );
    		output.flush();
    		genMsg.append( "\nhere is the message: " + message );
    		}
    
    
    		// process problems sending object
    		catch ( IOException ioException ) {
    			genMsg.append( "\nError writing object3" );
    		}
    	}
    	
    
    	public static void main( String args[] )	
    	{ 
    	
    		ClientChat application;
    		application = new ClientChat( "127.0.0.1",5130,args[0] );
    		application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
    		application.runClient();
    
    	}
    
          }
    Last edited by pappyj77; 09-13-2011 at 04:02 AM.

  2. #2
    Norm's Avatar
    Norm is online now Moderator
    Join Date
    Jun 2008
    Location
    Eastern Florida
    Posts
    17,556
    Rep Power
    25

    Default Re: message passing in Client/Server Chat problem

    when the user selects a name on the userlist(JList), the user should send a message to the name selected
    Some questions about how the code is working.
    What does happen when you execute the program?
    Does the client sent it ok?
    Does the server get the message?
    What does the server do when it gets the message?
    Does the server send it ok?
    Does the client get the message?

  3. #3
    pappyj77 is offline Member
    Join Date
    Jul 2011
    Location
    kent, UK
    Posts
    47
    Rep Power
    0

    Default Re: message passing in Client/Server Chat problem

    the serverthread can read it ok but i just dnt know how to send it to my sever brodcast

  4. #4
    Norm's Avatar
    Norm is online now Moderator
    Join Date
    Jun 2008
    Location
    Eastern Florida
    Posts
    17,556
    Rep Power
    25

    Default Re: message passing in Client/Server Chat problem

    When I bring up two clients the first one's list only contains its name
    the second client's list has no entries.

    My test code:
    Java Code:
        public static void main( String args[] )	{ 
    
          Thread t0 = new Thread(new Runnable() {
            public void run() {
       	   ServerChat servr = new ServerChat();
       		servr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
       		servr.runServer();
            }
          });
          t0.start();
    
          Thread t1 = new Thread(new Runnable() {
            public void run() {
          		ClientChat application = new ClientChat( "127.0.0.1",5130, "First" );
          		application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
          		application.runClient();
            }
          });
          t1.start();
          Thread t2 = new Thread(new Runnable() {
            public void run() {
          		ClientChat application = new ClientChat( "127.0.0.1",5130, "Second" );
          		application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
          		application.runClient();
            }
          });
          t2.start();
       } // end main

  5. #5
    pappyj77 is offline Member
    Join Date
    Jul 2011
    Location
    kent, UK
    Posts
    47
    Rep Power
    0

    Default Re: message passing in Client/Server Chat problem

    thats a bit weired i have it here fine....

  6. #6
    Norm's Avatar
    Norm is online now Moderator
    Join Date
    Jun 2008
    Location
    Eastern Florida
    Posts
    17,556
    Rep Power
    25

    Default Re: message passing in Client/Server Chat problem

    On my second test neither client got any names in the right hand list.

  7. #7
    pappyj77 is offline Member
    Join Date
    Jul 2011
    Location
    kent, UK
    Posts
    47
    Rep Power
    0

    Default Re: message passing in Client/Server Chat problem

    ok... i will reupload the progra in a sec pls... thank you

  8. #8
    pappyj77 is offline Member
    Join Date
    Jul 2011
    Location
    kent, UK
    Posts
    47
    Rep Power
    0

    Default Re: message passing in Client/Server Chat problem

    it has been updated. thank you...

  9. #9
    Norm's Avatar
    Norm is online now Moderator
    Join Date
    Jun 2008
    Location
    Eastern Florida
    Posts
    17,556
    Rep Power
    25

    Default Re: message passing in Client/Server Chat problem

    There are three programs. Which one is new?

  10. #10
    pappyj77 is offline Member
    Join Date
    Jul 2011
    Location
    kent, UK
    Posts
    47
    Rep Power
    0

    Default Re: message passing in Client/Server Chat problem

    since the programs u have are not working as they should, i would suggest u replace all three, and remember to delete the class files previously created.i noticed sometimes they are not overwritten when a new program has been compiled... thnks

  11. #11
    Norm's Avatar
    Norm is online now Moderator
    Join Date
    Jun 2008
    Location
    Eastern Florida
    Posts
    17,556
    Rep Power
    25

    Default Re: message passing in Client/Server Chat problem

    Not much change.
    The second client gets the name of the first one.
    The first one does not get any names in the list.

  12. #12
    pappyj77 is offline Member
    Join Date
    Jul 2011
    Location
    kent, UK
    Posts
    47
    Rep Power
    0

    Default Re: message passing in Client/Server Chat problem

    am sorry, i think the thread snippet u added must be the problem then i am not having any prolem with the JList

  13. #13
    Norm's Avatar
    Norm is online now Moderator
    Join Date
    Jun 2008
    Location
    Eastern Florida
    Posts
    17,556
    Rep Power
    25

    Default Re: message passing in Client/Server Chat problem

    You need to add a LOT more debug printlns to your code. To show what is happening when a message is received and where the logic flow goes.

  14. #14
    Norm's Avatar
    Norm is online now Moderator
    Join Date
    Jun 2008
    Location
    Eastern Florida
    Posts
    17,556
    Rep Power
    25

    Default Re: message passing in Client/Server Chat problem

    Sorry, I like the tests to fully start from a single program. I press one button and the code is executed.
    Try the code I posted and see what happens with your version.

  15. #15
    pappyj77 is offline Member
    Join Date
    Jul 2011
    Location
    kent, UK
    Posts
    47
    Rep Power
    0

    Default Re: message passing in Client/Server Chat problem

    yes i tried it with ur code and its definately not what i see when i run each client separatly.

  16. #16
    Norm's Avatar
    Norm is online now Moderator
    Join Date
    Jun 2008
    Location
    Eastern Florida
    Posts
    17,556
    Rep Power
    25

    Default Re: message passing in Client/Server Chat problem

    What's different?

  17. #17
    pappyj77 is offline Member
    Join Date
    Jul 2011
    Location
    kent, UK
    Posts
    47
    Rep Power
    0

    Default Re: message passing in Client/Server Chat problem

    the Jlist does not update

  18. #18
    Norm's Avatar
    Norm is online now Moderator
    Join Date
    Jun 2008
    Location
    Eastern Florida
    Posts
    17,556
    Rep Power
    25

    Default Re: message passing in Client/Server Chat problem

    Is it a timing problem?
    Does the client get the data to go in the list?

  19. #19
    pappyj77 is offline Member
    Join Date
    Jul 2011
    Location
    kent, UK
    Posts
    47
    Rep Power
    0

    Default Re: message passing in Client/Server Chat problem

    Yes it is a timing problem.
    it does get the data for the list.
    Last edited by Norm; 09-13-2011 at 02:53 PM.

  20. #20
    Norm's Avatar
    Norm is online now Moderator
    Join Date
    Jun 2008
    Location
    Eastern Florida
    Posts
    17,556
    Rep Power
    25

    Default Re: message passing in Client/Server Chat problem

    You have not documented your protocol.
    For example: What does it mean when a client receives a .
    Don't respond here, put the comments in the code so when someone reads the code they understand what the code is doing.

Similar Threads

  1. Simple client and server chat system
    By danborgir in forum New To Java
    Replies: 1
    Last Post: 04-26-2011, 01:34 PM
  2. Multithreaded Client/Server Chat program
    By f0ns in forum Threads and Synchronization
    Replies: 3
    Last Post: 10-21-2009, 05:26 PM
  3. Multithread Chat server/client
    By gwaldarick in forum Advanced Java
    Replies: 3
    Last Post: 09-19-2009, 12:22 AM
  4. [SOLVED] UDP chat client server
    By Koren3 in forum Networking
    Replies: 2
    Last Post: 04-25-2009, 01:51 AM
  5. passing info between server/client problem
    By DarkBlaze in forum New To Java
    Replies: 13
    Last Post: 07-24-2008, 03:14 AM

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •