Saturday, February 16, 2013

Java Tutorial-Instant Message

Source code:
Class Client:
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import javax.swing.*;
public class Client extends JFrame{
private JTextField userText;
private JTextArea chatWindow;
private ObjectOutputStream output;
private ObjectInputStream input;
private String message="";
private String serverIP;
private Socket connection;

public Client(String host){
 super("Client mofo!");
 serverIP=host;
 userText=new JTextField();
 userText.setEditable(false);
 userText.addActionListener(
   new ActionListener(){
    public void actionPerformed (ActionEvent event){
     sendMessage(event.getActionCommand());
     userText.setText("");
   
    }
   }
   );
 add(userText, BorderLayout.NORTH);
 chatWindow=new JTextArea();
 add(new JScrollPane(chatWindow),BorderLayout.CENTER);
 setSize(300,150);
 setVisible(true);
}
public void startRunning(){
 try{
  connectToServer();
  setupStreams();
  whileChatting();
 }catch(EOFException eofException){
  showMessage("\n Client terminated connection");

 }catch(IOException ioException){
  ioException.printStackTrace();

 }finally{
  closeCrap();
 }

}
private void connectToServer() throws IOException{
 showMessage("Attempting connection...\n");
 connection=new Socket(InetAddress.getByName(serverIP),6789);
 showMessage("Connected to:"+connection.getInetAddress().getHostName());
}
private void setupStreams() throws IOException{
 output=new ObjectOutputStream(connection.getOutputStream());
 output.flush();
 input=new ObjectInputStream(connection.getInputStream());
 showMessage("\n Dude your streams are now good to go!\n");
}
private void whileChatting() throws IOException{
 ableToType(true);
 do{
  try{
   message=(String) input.readObject();
   showMessage("\n"+message);
  }catch(ClassNotFoundException classNotfoundException){
   showMessage("\n I don't know that object type");
  }

 }while(!message.equals("SERVER - END"));
 }
private void closeCrap(){
 showMessage("\n closing crap down...");
 ableToType(false);
 try{
  output.close();
  input.close();
  connection.close();
 }catch(IOException ioException){
  ioException.printStackTrace();
 }
}
private void sendMessage(String message){
 try{
  output.writeObject("CLIENT- "+ message);
  output.flush();
  showMessage("\nCLIENT- " + message);
 }catch(IOException ioException){
  chatWindow.append("\n something messed up sending message");
 }

}
private void showMessage(final String m){
 SwingUtilities.invokeLater(
new Runnable(){
 public void run(){
  chatWindow.append(m);

 }

}
   );


}
private void ableToType(final boolean tof){
 SwingUtilities.invokeLater(
   new Runnable(){
           public void run(){
            userText.setEditable(tof);

            }

              }
   );
}

}

Class ClientTest:
import javax.swing.JFrame;
public class ClientTest {
 public static void main(String[] args) {
  Client charlie;
  charlie=new Client("127.0.0.1");
  charlie.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  charlie.startRunning();
 }
}


Class Server:
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Server extends JFrame{
private JTextField userText;
private JTextArea chatWindow;
private ObjectOutputStream output;
private ObjectInputStream input;
private ServerSocket server;
private Socket connection;
public Server(){
 super("Buckys Instant Messenger");
 userText=new JTextField();
 userText.setEditable(false);
 userText.addActionListener(
   new ActionListener(){
    public void actionPerformed(ActionEvent event){
     sendMessage(event.getActionCommand());
     userText.setText("");
    }  
  
   }
   );

 add(userText, BorderLayout.NORTH);
 chatWindow=new JTextArea();
 add(new JScrollPane(chatWindow));
 setSize(300,150);
 setVisible(true);
}
public void startRunning(){
 try{
  server=new ServerSocket(6789,100);
  while(true){
   try{
    waitForConnection();
    setupStreams();
    whileChatting();
   }catch(EOFException eofException){
    showMessage("\n Server ended the connection! ");
   }finally{
    closeCrap();
   }
 
  }

 }catch(IOException ioException){
  ioException.printStackTrace();

 }


}
private void waitForConnection() throws IOException{
 showMessage("Waiting for someone to connect...\n");
 connection=server.accept();
 showMessage(" Now connected to " + connection.getInetAddress().getHostName());
}
private void setupStreams() throws IOException{
 output=new ObjectOutputStream(connection.getOutputStream());
 output.flush();
 input=new ObjectInputStream(connection.getInputStream());
 showMessage("\n Stream are now setup! \n");
}
private void whileChatting() throws IOException{
 String message="You are now connected!";
 sendMessage(message);
 ableToType(true);
 do{
  try{
   message=(String) input.readObject();
   showMessage("\n"+message);
  }catch(ClassNotFoundException classNotFoundException){
   showMessage("\n i don't know that user send!!");
 
  }

 }while(!message.equals("CLIENT - END"));

}
private void closeCrap(){
 showMessage("\n Closing connections...\n");
 ableToType(false);
 try{
  output.close();
  input.close();
  connection.close();
 }catch(IOException ioException){
  ioException.printStackTrace();

 }
}
private void sendMessage(String message){
 try{
  output.writeObject("SERVER - " + message);
  output.flush();
  showMessage("\nServer -" + message);
 }catch(IOException ioException){
  chatWindow.append("\n ERROR: DUDE I CANT SEND THAT MESSAGE");

 }

}
private void showMessage(final String text){
 SwingUtilities.invokeLater(
   new Runnable(){
    public void run(){
     chatWindow.append(text);
   
    }
  
   }
   );

}
private void ableToType(final boolean tof){
 SwingUtilities.invokeLater(
   new Runnable(){
    public void run(){
     userText.setEditable(tof);
     }
    }
   );
 }
}

Class ServerTest:
import javax.swing.JFrame;

public class ServerTest {
 public static void main(String[] args) {
  Server sally=new Server();
  sally.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  sally.startRunning();
 }
}



No comments:

Post a Comment