See Screenshots
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.border.EtchedBorder;
public class TwoChat extends javax.swing.JFrame {
ServerSocket ss;
Socket s;
JTextField text=new JTextField();
JButton send=new JButton();
JTextArea messages=new JTextArea();
PrintWriter pout;
BufferedReader br;
ActionListener al;
String ipstring;
boolean ready2send=false;
TwoChat pt;
boolean HorC;
String cliOrServ;
public TwoChat(boolean hostOrConnect,String ip)
{
ipstring=ip;
setLayout(null);
setSize(500,500);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
add(text);
text.setLocation(5,5);
text.setSize(getWidth()-40-60,30);
text.setEnabled(false);
add(send);
send.setLocation(10+text.getWidth(),text.getY());
send.setText("Send");
send.setSize(60,30);
add(messages);
messages.setEditable(false);
messages.setBorder(new EtchedBorder());
messages.setLocation(5,text.getHeight()+text.getY()+5);
messages.setSize(getWidth()-30,getHeight()-text.getY()-text.getHeight()-50);
al=new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
ready2send=true;
}
};
send.addActionListener(al);
pt=this;
HorC=hostOrConnect;
if(HorC)
cliOrServ="\nServer: ";
else
cliOrServ="\nClient: ";
Messenger.start();
}
public static void main(String args[]) {
int inp=JOptionPane.showConfirmDialog(null,"Do you want to host the chat?\nYes - Act as server\nNo - Act as client","Want to host a chat?",JOptionPane.YES_NO_OPTION);
if(inp==0)
{
new TwoChat(true,null).setVisible(true);
}
else
{
String ipstring=JOptionPane.showInputDialog("Please enter the ip address");
try{
InetAddress.getByName(ipstring);
new TwoChat(false,ipstring).setVisible(true);
}catch(Exception e){JOptionPane.showMessageDialog(null,"Invalid or Unreachable IP");}
}
}
Thread Messenger=new Thread()
{
public void run()
{
try{
if(HorC)
{
messages.setText("Waiting for an incoming connection.\nEnter my ip at client side.\nMy ip: "+InetAddress.getLocalHost().getHostAddress());
ss=new ServerSocket(9999);
s= ss.accept();
s.setKeepAlive(true);
}
else
{
messages.setText("Connecting to:"+ipstring+":9999");
s=new Socket(InetAddress.getByName(ipstring),9999);
}
text.setEnabled(true);
pout = new PrintWriter(s.getOutputStream(),true);
br=new BufferedReader(new InputStreamReader(s.getInputStream()));
messages.setText(messages.getText()+"\nConnected to:"+s.getInetAddress().getHostAddress()+":"+s.getPort());
while(true)
{
if(ready2send==true)
{
pout.println(text.getText());
messages.setText(messages.getText()+"\nMe: "+text.getText());
text.setText("");
ready2send=false;
}
if(br.ready())
{
messages.setText(messages.getText()+cliOrServ+br.readLine());
}
Thread.sleep(80);
}
}catch(Exception ex)
{
JOptionPane.showMessageDialog(pt,ex.getMessage());
messages.setText("Cannot connect!");
try {
wait(3000);
} catch (InterruptedException ex1) {}
System.exit(0);
}
}
};
}




No comments:
Post a Comment