dcsimg
August 21, 2018
Hot Topics:

User Code: Java One-to-Many Chat

  • January 23, 2002
  • By S. Balasubramanian
  • Send Email »
  • More Articles »

Client Setting

/*
 
        Net Meeting.
   ______________ 
 
*/
 
/* Tips to run this :
    __________________
 
 (After compiling chatkaro12mserver.java)
 
 Step1: Open another prompt and run java chatkaro12mclient  127.0.0.1.
          ___________________________________   
 
   
*/ 

Server Setting

/*
 
          ** Net Meeting **
   __________________
 
*/
 
/* Tips to run this:
    __________________
 
  
 Step1: Open command prompt and run java chatkaro12mserver.
          ______________________   
 
 Step2: Continue with client program.
 
   
*/ 

Code: chatkaro12mserver.java

//  Program Starts...


import java.io.*;
import java.net.*;
import java.util.Vector;
import java.util.Enumeration;
public class chatkaro12mServer
{
	//static String k=socket.getInetAddress().getHostName();
	private int port=5001;
	private boolean li=true;
	private Vector clients=new Vector();
	public static void main(String a[])
	{
		System.out.println(" Press ctrl-c to Quit.");
		new chatkaro12mServer().server();
	}
	 void server()
	{
		ServerSocket serverSock=null;
		try 
		{
			InetAddress serverAddr=InetAddress.getByName(null);
			System.out.println("Waiting for"+serverAddr.getHostName()+"on port"+port);
			serverSock=new ServerSocket(port,50);
		}
		catch(IOException e)
		{
			System.out.println(e.getMessage()+":Failed");
			return;
		}
		while(li)
		{
			try
			{
				Socket socket=serverSock.accept();
				System.out.println("Accept "+socket.getInetAddress().getHostName());
				DataOutputStream remoteOut= new DataOutputStream(socket.getOutputStream());
				clients.addElement(remoteOut);
				new ServerHelper(socket,remoteOut,this).start();
			}
			catch(IOException e)
			{
				System.out.println(e.getMessage()+":Failed");
			}
		}
		if(serverSock !=null)
		{
			try
			{
				serverSock.close();
			}
			catch(IOException x)
			{
			}
		}
	}
	synchronized Vector getClients()
	{
		return clients;
	}
	synchronized void removeFromClients(DataOutputStream remoteOut)
	{	
		clients.removeElement(remoteOut);
	}
}
class ServerHelper extends Thread
{
	private Socket sock;
	private DataOutputStream remoteOut;
	private chatkaro12mServer server;
	private boolean li=true;
	private DataInputStream remoteIn;
	ServerHelper(Socket sock,DataOutputStream remoteOut,chatkaro12mServer server) throws IOException
	{
		this.sock=sock;
		this.remoteOut=remoteOut;
		this.server=server;
		remoteIn=new DataInputStream(sock.getInputStream());
	}
	public synchronized void run()
	{
		String s;
		try
		{
			while(li)
			{
				s=remoteIn.readUTF();
				broadcast(s);
			}
		}
		catch(IOException e)
		{	
			System.out.println(e.getMessage()+"connection lost");
		}
		finally
		{
			try
			{
				cleanUp();
			}
			catch (IOException x)
			{
			}
		}
	}
	private void broadcast(String s)
	{	
		Vector clients=server.getClients();
		DataOutputStream dataOut=null;
		for(Enumeration e=clients.elements();
		e.hasMoreElements(); )
		{
		dataOut=(DataOutputStream)(e.nextElement());
		if(!dataOut.equals(remoteOut))
		{
		try
		{
		dataOut.writeUTF(s);
		}
		catch(IOException x)
		{
		System.out.println(x.getMessage()+"Failed");
		server.removeFromClients(dataOut);
	}

}
}
}

private void cleanUp() throws IOException
{
	if(remoteOut!=null)
	{
		server.removeFromClients(remoteOut);
		remoteOut.close();
		remoteOut=null;
	}

	if(remoteIn!=null)
	{
		remoteIn.close();
		remoteIn=null;
	}

	if(sock!=null)
	{
		sock.close();
		sock=null;
	}
}
protected void finalize() throws Throwable
{
	try
	{
		cleanUp();
	}
	catch(IOException x)
	{
	}
	super.finalize();
}
}

Code: chatkaro12mclient.java

//  Program Starts...

import java.io.*;
import javax.swing.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
public class chatkaro12mClient extends Panel
{
TextArea receivedText;
Socket sock;
private GridBagConstraints c;
private GridBagLayout gridBag;
private Frame frame;
private Label label;
JButton send;
JButton exit;
private int port=5001;
private TextArea sendText;
private String hostname;
private String username;
private DataOutputStream remoteOut;
ImageIcon i1,i2;
public static void main(String args[])
{
if(args.length != 2)
{
System.out.println("Format is : java chatkaro12mClient  ");
return;
}
Frame f1=new Frame("Welcome Protocol");
f1.resize(800,600);
f1.show();
JOptionPane.showMessageDialog(f1,"Welcome "+args[0]+".. Have a nice Session.","Welcome",0);
Frame f= new Frame("Connecting to Mr. "+args[0]);
chatkaro12mClient chat=new chatkaro12mClient(f,args[0],args[1]);
f.add("Center",chat);
f.setSize(800,600);
f.show();
chat.client();
}
public chatkaro12mClient(Frame f,String user,String host)
{
frame=f;
frame.addWindowListener(new WindowExitHandler());
username=user;
hostname=host;
//Insets insets=new Insets(10,20,5,10);
//gridBag=new GridBagLayout();
//setLayout(gridBag);
/*c=new GridBagConstraints();
c.insets=insets;
c.gridy=0;
c.gridx=0;*/
label=new Label("Text to send :");
add(label);
/*gridBag.setConstraints(label,c);

c.gridx=1;*/
sendText=new TextArea(15,30);
/*sendText.addActionListener(new TextActionHandler());
gridBag.setConstraints(sendText,c);*/
add(sendText);
//c.gridy=1;
//c.gridx=0;
label= new Label("Text received :");
//gridBag.setConstraints(label,c);
add(label);
//c.gridx=1;
receivedText=new TextArea(15,30);
//gridBag.setConstraints(receivedText,c);
add(receivedText);
ImageIcon i1=new ImageIcon("click.gif");
ImageIcon i2=new ImageIcon("doorin2.gif");
send=new JButton(i1);
exit=new JButton(i2);
add(send);
add(exit);
send.addActionListener(new TextActionHandler());
exit.addActionListener(new EXIT());
}

void client()
{
try
{
	if(hostname.equals("local"))
		hostname=null;
	InetAddress serverAddr= InetAddress.getByName(hostname);
	sock=new Socket(serverAddr.getHostName(),port);
	remoteOut=new DataOutputStream(sock.getOutputStream());
	System.out.println("Connected to server " + serverAddr.getHostName() + " on port " + sock.getPort());
	new chatkaro12mClientReceive(this).start();
}
catch(IOException e)
	{
	System.out.println(e.getMessage() + " : Failed to connect to server.");
	}
}
protected void finalize() throws Throwable
{
try
{
	if(remoteOut != null)
		remoteOut.close();
	if(sock != null)
		sock.close();
}
catch(IOException x)
	{}
super.finalize();
}
class WindowExitHandler extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
Window w=e.getWindow();
w.setVisible(false);
w.dispose();
System.exit(0);
}
}

class EXIT implements ActionListener
 {
   public void actionPerformed(ActionEvent e)
  {
   if((JOptionPane.showConfirmDialog(new Frame(),"Are You Sure to close the Session?"))==JOptionPane.YES_OPTION)              
	{
	      JOptionPane.showMessageDialog(new Frame(),"Thank U. Visit Again. ","Good Bye",0);	
              System.exit(0);
	}
    	
  }
 }
class TextActionHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
try
{
remoteOut.writeUTF(sendText.getText());
JOptionPane.showMessageDialog(new Frame(),"Your msg has been sent ","Confirmation",0);
sendText.setText("");
}
catch(IOException x)
{
System.out.println(x.getMessage() + " : connection to peer lost.");
}
}
}
}
class chatkaro12mClientReceive extends Thread 
{
private chatkaro12mClient chat;
chatkaro12mClientReceive(chatkaro12mClient chat)
{
this.chat=chat;
}
public synchronized void run()
{
String s;
DataInputStream remoteIn=null;
try
{
	remoteIn= new DataInputStream(chat.sock.getInputStream());
while(true)
	{
	s=remoteIn.readUTF();
	chat.receivedText.setText(s);
	}
}
catch(IOException e)
{
System.out.println(e.getMessage() + " : connection to peer lost.");
}
finally
{
try
{
if(remoteIn !=null)
	remoteIn.close();
}
catch(IOException x)
{}
}
}
}

Downloads

    Download source file = 3K

    Download source file = 4K

See previous submission: User Code: ChatKaro

Dedication: To my Brothers and Sisters.

This code was contributed by S. Balasubramanian. For more information, visit his site.

[To contribute a code article to Gamelan, please contact kmurphy@internet.com.]






Comment and Contribute

 


(Maximum characters: 1200). You have characters left.

 

 


Enterprise Development Update

Don't miss an article. Subscribe to our newsletter below.

By submitting your information, you agree that developer.com may send you developer offers via email, phone and text message, as well as email offers about other products and services that developer believes may be of interest to you. developer will process your information in accordance with the Quinstreet Privacy Policy.

Sitemap

Thanks for your registration, follow us on our social networks to keep up-to-date