Postingan-Keren

Blog gado-gado yang menyediakan tutorial dan download gratis

Breaking

Monday 27 March 2017

Aplikasi Chat Multi Client dengan Java

Aplikasi Chatting Multi Client dengan Java
Aplikasi Chatting Multi Client dengan Java 
Aplikasi Chatting Multi Client di Java ini merupakan salah satu implementasi dari penggunaan Java Socket.Di aplikasi yang saya cari di internet ini,kita dapat melakukan chat secara real-time seperti gambar diatas.Di aplikasi ini belum terhubung ke database dan masih tahap pengembangan seperti tombol enkripsi dan dekripsi belum saya buat.Di program in saya menggunakan Netbeans 8.1 dengan memiliki 5 class yaitu :

1.Chat Server Return


package javachatgui;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.*;
import java.util.Scanner;

public class Chat_Server_Return implements Runnable 
{
    //Variabel Global
    Socket SOCK;
    private Scanner INPUT;
    private PrintWriter OUT;
    String MESSAGE = "";
    
    public Chat_Server_Return (Socket X)
    {
        this.SOCK = X;
    }
    
    public void CheckConnection() throws IOException
    {
        if(!SOCK.isConnected())
        {
            for(int i = 1; i<= Chat_Server.ConnectionArray.size();i++)
            {
                if(Chat_Server.ConnectionArray.get(i) == SOCK)
                {
                    Chat_Server.ConnectionArray.remove(i);
                }
            }
            for(int i = 1; i<= Chat_Server.ConnectionArray.size();i++)
            {
                Socket TEMP_SOCK = (Socket) Chat_Server.ConnectionArray.get(i-1);
                PrintWriter TEMP_OUT = new PrintWriter (TEMP_SOCK.getOutputStream());
                TEMP_OUT.println(TEMP_SOCK.getLocalAddress().getHostName() +"Disconnected!");
                TEMP_OUT.flush();
                //Melihat yang DC pada server
                System.out.println(TEMP_SOCK.getLocalAddress().getHostName() +"Disconnected!");
            }
        }     
    }
    public void run()
    {
        try
        {
            try{
                INPUT = new Scanner(SOCK.getInputStream());
                OUT = new PrintWriter(SOCK.getOutputStream());
                
                while(true)
                {
                    CheckConnection();
                    
                    if(!INPUT.hasNext())
                    { return; }
                    MESSAGE = INPUT.nextLine();
                    System.out.println("Client berbicara :"+MESSAGE);
                    
                    for(int i = 1; i<= Chat_Server.ConnectionArray.size();i++)
                    {
                         Socket TEMP_SOCK = (Socket) Chat_Server.ConnectionArray.get(i-1);
                         PrintWriter TEMP_OUT = new PrintWriter (TEMP_SOCK.getOutputStream());
                         TEMP_OUT.println(MESSAGE);
                         TEMP_OUT.flush();
                         System.out.println("Mengirim Ke " +TEMP_SOCK.getLocalAddress().getHostName());
                    }
                }
            }
                finally
                {
                    SOCK.close();
                }
        }
            catch(Exception X) {System.out.print(X);}
    }  
}

2.Chat Server


/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javachatgui;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.*;
import java.util.ArrayList;
import java.util.Scanner;


public class Chat_Server {

    //Variabel Global
    public static ArrayList ConnectionArray = new ArrayList();
    public static ArrayList CurrentUsers = new ArrayList();
    public static void main(String[] args) throws IOException 
    {
        try
        {
            final int PORT = 444;
            ServerSocket SERVER = new ServerSocket(PORT);
            System.out.println("Menunggu Clients...");
            while(true)
            {
                Socket SOCK = SERVER.accept();
                ConnectionArray.add(SOCK);
                
                System.out.println("Client terhubung dari : " + SOCK.getLocalAddress().getHostName());
                AddUserName(SOCK);
                
                Chat_Server_Return CHAT = new Chat_Server_Return(SOCK);
                Thread X = new Thread(CHAT);
                X.start();
            }
        }
        catch(Exception X) {System.out.print(X);} 
    }
    
    public static void AddUserName(Socket X)throws IOException
    {
        Scanner INPUT = new Scanner(X.getInputStream());
        String UserName = INPUT.nextLine();
        CurrentUsers.add(UserName);
        
        for(int i = 1; i<= Chat_Server.ConnectionArray.size();i++)
        {
            Socket TEMP_SOCK = Chat_Server.ConnectionArray.get(i-1);
            PrintWriter OUT = new PrintWriter (TEMP_SOCK.getOutputStream());
            OUT.println("#?!" +CurrentUsers);
            OUT.flush();
        }
    }
    
}


3.Chat_Client_GUI

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javachatgui;

import java.io.PrintWriter;
import java.net.*;
import javax.swing.*;
import javax.swing.JOptionPane;

public class Chat_Client_GUI {
    //global
    private static Chat_Client ChatClient;
    public static String UserName = "Anonymous";
    
    //AES ALGORITHM
    AESAlgorithm aesAlgo;
    byte[] keyValue = new byte[]{'T', 'h', 'e', 'B', 'e', 's', 't', 'S', 'e', 'c', 'r', 'e', 't', 'K', 'e', 'y'};
    
   /*public Chat_Client_GUI()
   {
       initComponents();
       aesAlgo = new AESAlgorithm("MySecretKey");
   }*/
    
    //GUI Global - Main Window
    public static JFrame MainWindow = new JFrame();
    private static  JButton B_ABOUT = new JButton();
    private static  JButton B_CONNECT = new JButton();
    private static  JButton B_DISCONNECT = new JButton();
    private static  JButton B_HELP = new JButton();
    private static  JButton B_SEND = new JButton();
    private static  JButton B_ENCRYPT = new JButton();
    private static  JButton B_DECRYPT = new JButton();
    private static JLabel L_Message = new JLabel("Message: ");
    public static JTextField TF_Message = new JTextField(20);
    private static JLabel L_Conversation = new JLabel();
    public static JTextArea TA_CONVERSATION = new JTextArea();
    private static JScrollPane SP_CONVERSATION = new JScrollPane();
    private static JLabel L_ONLINE = new JLabel();
    public static JList JL_ONLINE = new JList();
    private static JScrollPane SP_ONLINE = new JScrollPane();
    private static JLabel L_LoggedInAs = new JLabel();
    private static JLabel L_LoggedInAsBox = new JLabel();
    
    //GUI Globals - Login Window
    public static JFrame LogInWindow = new JFrame();
    public static JTextField TF_UserNameBox = new JTextField(20);
    private static JButton B_ENTER = new JButton("Masuk");
    private static JLabel L_EnterUserName = new JLabel("Masukan Username = ");
    private static JPanel P_LogIn = new JPanel();
    
    public static void main(String[] args) {
        BuildMainWindow();
        Initialize();
    }
    
    public static void Connect()
    {
        try
        {
            final int PORT = 444;
            final String HOST = "localhost";
            Socket SOCK = new Socket(HOST,PORT);
            System.out.println("Kamu Terkoneksi ke : "+HOST);
            
            ChatClient = new Chat_Client(SOCK);
            
            //Mengirim Nama Ke List
            PrintWriter OUT = new PrintWriter(SOCK.getOutputStream());
            OUT.println(UserName);
            OUT.flush();
            
            Thread X = new Thread(ChatClient);
            X.start();
        }
        catch(Exception E)
        {
            System.out.print(E);
            JOptionPane.showMessageDialog(null,"Server Tidak Menjawab");
            System.exit(0);
        }
    }
    public static void Initialize()
    {
        //untuk Menmbuat tombol mati/atau menyala terlebih dahulu
        B_SEND.setEnabled(false);
        B_DISCONNECT.setEnabled(false);
        B_CONNECT.setEnabled(true);
    }
    public static void BuildLogInWindow() {
        LogInWindow.setTitle("Siapa Nama Anda? : ");
        LogInWindow.setSize(400,100);
        LogInWindow.setLocation(250,200);
        LogInWindow.setResizable(false);
        P_LogIn = new JPanel();
        P_LogIn.add(L_EnterUserName);
        P_LogIn.add(TF_UserNameBox);
        P_LogIn.add(B_ENTER);
        LogInWindow.add(P_LogIn);
        
        Login_Action();
        LogInWindow.setVisible(true);
    }
    
    public static void BuildMainWindow()
    {
        MainWindow.setTitle(UserName +"Chat Box");
        MainWindow.setSize(450,500);
        MainWindow.setLocation(220,180);
        MainWindow.setResizable(false);
        ConfigureMainWindow();
        MainWindow_Action();
        MainWindow.setVisible(true);
    }
    public static void ConfigureMainWindow()
    {
        MainWindow.setBackground(new java.awt.Color(255, 255, 255));
        MainWindow.setSize(550,350);
        MainWindow.getContentPane().setLayout(null);
        
        B_SEND.setBackground(new java.awt.Color(0, 0, 255));
        B_SEND.setForeground(new java.awt.Color(255 ,255 ,255));
        B_SEND.setText("Kirim");
        MainWindow.getContentPane().add(B_SEND);
        B_SEND.setBounds(250, 40, 81, 25);
        
        B_ENCRYPT.setBackground(new java.awt.Color(0, 0, 255));
        B_ENCRYPT.setForeground(new java.awt.Color(255 ,255 ,255));
        B_ENCRYPT.setText("Enkripsi");
        MainWindow.getContentPane().add(B_ENCRYPT);
        B_ENCRYPT.setBounds(10, 275, 81, 25);
        
        B_DECRYPT.setBackground(new java.awt.Color(0, 0, 255));
        B_DECRYPT.setForeground(new java.awt.Color(255 ,255 ,255));
        B_DECRYPT.setText("dekripsi");
        MainWindow.getContentPane().add(B_DECRYPT);
        B_DECRYPT.setBounds(100, 275, 81, 25);
        
        B_DISCONNECT.setBackground(new java.awt.Color(0, 0, 255));
        B_DISCONNECT.setForeground(new java.awt.Color(255, 255, 255));
        B_DISCONNECT.setText("DISCONNECT");
        MainWindow.getContentPane().add(B_DISCONNECT);
        B_DISCONNECT.setBounds(10, 40, 110, 25);
        
        B_CONNECT.setBackground(new java.awt.Color(0, 0, 255));
        B_CONNECT.setForeground(new java.awt.Color(255, 255, 255));
        B_CONNECT.setText("CONNECT");
        MainWindow.getContentPane().add(B_CONNECT);
        B_CONNECT.setBounds(130, 40, 110, 25);
        
        B_HELP.setBackground(new java.awt.Color(0, 0, 255));
        B_HELP.setForeground(new java.awt.Color(255, 255, 255));
        B_HELP.setText("Help");
        MainWindow.getContentPane().add(B_HELP);
        B_HELP.setBounds(420, 40, 70, 25);
        
        B_ABOUT.setBackground(new java.awt.Color(0, 0, 255));
        B_ABOUT.setForeground(new java.awt.Color(255, 255, 255));
        B_ABOUT.setText("ABOUT");
        MainWindow.getContentPane().add(L_Message);
        
        TF_Message.setForeground(new java.awt.Color(0, 0, 255));
        TF_Message.requestFocus();
        MainWindow.getContentPane().add(TF_Message);
        TF_Message.setBounds(70, 4, 260, 30);
        
        L_Conversation.setHorizontalAlignment(SwingConstants.CENTER);
        L_Conversation.setText("Conversation");
        MainWindow.getContentPane().add(L_Conversation);
        L_Conversation.setBounds(100, 70, 140, 16);
        
        TA_CONVERSATION.setColumns(20);
        TA_CONVERSATION.setFont(new java.awt.Font("Tahoma", 0, 12));
        TA_CONVERSATION.setForeground(new java.awt.Color(0, 0, 255));
        TA_CONVERSATION.setLineWrap(true);
        TA_CONVERSATION.setRows(5);
        TA_CONVERSATION.setEditable(false);
        
        
        SP_CONVERSATION.setHorizontalScrollBarPolicy(
                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        SP_CONVERSATION.setVerticalScrollBarPolicy(
                ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        SP_CONVERSATION.setViewportView(TA_CONVERSATION);
        MainWindow.getContentPane().add(SP_CONVERSATION);
        SP_CONVERSATION.setBounds(10, 90, 330, 180);
        
        L_ONLINE.setHorizontalAlignment(SwingConstants.CENTER);
        L_ONLINE.setToolTipText("");
        MainWindow.getContentPane().add(L_ONLINE);
        L_ONLINE.setBounds(350, 70, 130, 16);
        
       // String [] TestNames = {"Dimas","Juang","Ipat","Kkh"};
        JL_ONLINE.setForeground(new java.awt.Color(0, 0, 255));
       // JL_ONLINE.setListData(TestNames);
        
        SP_ONLINE.setHorizontalScrollBarPolicy(
            ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        SP_ONLINE.setVerticalScrollBarPolicy(
            ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
        SP_ONLINE.setViewportView(JL_ONLINE);
        MainWindow.getContentPane().add(SP_ONLINE);
        SP_ONLINE.setBounds(350, 90, 130, 180);
        
        L_LoggedInAs.setFont(new java.awt.Font("Tahoma", 0, 12));
        L_LoggedInAs.setText("Yang Baru Bergabung");
        MainWindow.getContentPane().add(L_LoggedInAs);
        L_LoggedInAs.setBounds(348, 0, 140, 15);
        
        L_LoggedInAsBox.setHorizontalAlignment(SwingConstants.CENTER);
        L_LoggedInAsBox.setFont(new java.awt.Font("Tahoma", 0, 12));
        L_LoggedInAsBox.setForeground(new java.awt.Color(255, 0, 0));
        L_LoggedInAsBox.setBorder(
            BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        MainWindow.getContentPane().add(L_LoggedInAsBox);
        L_LoggedInAsBox.setBounds(340, 17, 150, 20);
    }
    public static void Login_Action()
    {
        B_ENTER.addActionListener(
                new java.awt.event.ActionListener()
            {
                @Override
                public void actionPerformed(java.awt.event.ActionEvent evt)
                {   ACTION_B_ENTER();     }
            }
        );
    }
    public static void ACTION_B_ENTER()
    {
        if(!TF_UserNameBox.getText().equals(""))
        {
            UserName = TF_UserNameBox.getText().trim();
            L_LoggedInAsBox.setText(UserName);
            Chat_Server.CurrentUsers.add(UserName);
            MainWindow.setTitle(UserName +" Chat Box");
            LogInWindow.setVisible(false);
            B_SEND.setEnabled(true);
            B_ENCRYPT.setEnabled(true);
            B_DECRYPT.setEnabled(false);
            B_DISCONNECT.setEnabled(true);
            B_CONNECT.setEnabled(false);
            Connect();
        }
        else
        {
            {JOptionPane.showMessageDialog(null, "Tolong Masukan Nama Anda");}
        }
    }
    
   
     public static void MainWindow_Action()
        {
            B_SEND.addActionListener(
                new java.awt.event.ActionListener()
                    {
                        
                        @Override
                         public void actionPerformed(java.awt.event.ActionEvent evt)
                        { ACTION_B_SEND(); }
                    }
            );
            
        B_ENCRYPT.addActionListener(
                new java.awt.event.ActionListener()
                    {
                        
                
                         public void actionPerformed(java.awt.event.ActionEvent evt)
                        { ACTION_B_ENCRYPT(); }
                    }
            );    
            
        B_DECRYPT.addActionListener(
                new java.awt.event.ActionListener()
                    {
                        
                       
                         public void actionPerformed(java.awt.event.ActionEvent evt)
                        { ACTION_B_DECRYPT(); }
                    }
            );
        
        
              
            B_DISCONNECT.addActionListener(
                    new java.awt.event.ActionListener()
                    {
                        
                        public void actionPerformed(java.awt.event.ActionEvent evt)
                        {   ACTION_B_DISCONNECT();     }
                    }
            );
              
            B_CONNECT.addActionListener(
                    new java.awt.event.ActionListener()
                {
                    
                    public void actionPerformed(java.awt.event.ActionEvent evt)
                    {   BuildLogInWindow();     }
                }
            );
            
              B_HELP.addActionListener(
                    new java.awt.event.ActionListener()
                {
                    
                    public void actionPerformed(java.awt.event.ActionEvent evt)
                    {   ACTION_B_HELP();     }
                }
            );
              B_ABOUT.addActionListener(
                    new java.awt.event.ActionListener()
                {
                    
                    public void actionPerformed(java.awt.event.ActionEvent evt)
                    {   ACTION_B_HELP();     }
                }
            );
        }
     
     
     
     public static void ACTION_B_ENCRYPT()
     {
         if(!TF_Message.getText().equals(""))
         {
             ChatClient.SEND(TF_Message.getText());
             TF_Message.requestFocus();
         }
     }
     
     public static void ACTION_B_SEND()
     {
         if(!TF_Message.getText().equals(""))
         {
            ChatClient.SEND(TF_Message.getText());
            TF_Message.requestFocus();
         }
     }
     
     public static void ACTION_B_DECRYPT()
     {
         if(!TF_Message.getText().equals(""))
         {
             ChatClient.SEND(TF_Message.getText());
             TF_Message.requestFocus();
         }
     }
     
     public static void ACTION_B_DISCONNECT()
     {
         try
         {
             ChatClient.DISCONNECT();
         }
         catch(Exception Y) { Y.printStackTrace();}
     }
     
     public static void ACTION_B_HELP()
     {
         JOptionPane.showMessageDialog(null, "Multi Client Chat Program");
     }
}


4.Chat_Client

package javachatgui;

import java.io.*;
import java.util.Scanner;
import java.net.*;
import javax.swing.JOptionPane;

public class Chat_Client implements Runnable {
    Socket SOCK;
    Scanner INPUT;
    Scanner SEND = new Scanner(System.in);
    Scanner DECRYPT = new Scanner(System.in);
    PrintWriter OUT;
    
    public Chat_Client(Socket X)
    {
        this.SOCK = X;
    }
    
    public void run()
    {
        try
        {
            try
            {
                INPUT = new Scanner(SOCK.getInputStream());
                OUT = new PrintWriter(SOCK.getOutputStream());
                OUT.flush();
                CheckStream();
            }
            finally
            {
                SOCK.close();
            }
        }
        catch(Exception X) { System.out.print("X"); }
    }
    public void DISCONNECT() throws IOException
    {
        OUT.println(Chat_Client_GUI.UserName +"Has Disconnect");
        OUT.flush();
        SOCK.close();
        JOptionPane.showMessageDialog(null,"Connected");
        System.exit(0);
    }
    
    public void CheckStream()
    {
        while(true)
        {
            RECEIVE();
        }
    }
    
    public void RECEIVE()
    {
        if(INPUT.hasNext())
        {
            String MESSAGE = INPUT.nextLine();
            
            if(MESSAGE.contains("#?!"))
            {
                String TEMP1 = MESSAGE.substring(3);
                       TEMP1 = TEMP1.replace("[","");
                       TEMP1 = TEMP1.replace("]","");
                       
                String[] CurrentUsers = TEMP1.split(", ");
                Chat_Client_GUI.JL_ONLINE.setListData(CurrentUsers);
            }
            else
            {
                Chat_Client_GUI.TA_CONVERSATION.append(MESSAGE +"\n");
            }
        }
    }
    
    public void SEND(String X)
    {
        OUT.println(Chat_Client_GUI.UserName +": " +X);
        OUT.flush();
        Chat_Client_GUI.TF_Message.setText("");
    }
    
      public void DECRYPT(String X)
    {
        OUT.println(Chat_Client_GUI.UserName +": " +X);
        OUT.flush();
        Chat_Client_GUI.TF_Message.setText("");
    }   
    
}

5.AES Algorithm

package javachatgui;
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;


public class AESAlgorithm {
     
    public static String algo = "AES";
    public byte[] keyValue;
    
    public AESAlgorithm(byte key[]){
        keyValue = key;
        }
    public Key generateKey() throws Exception {
        Key key = new SecretKeySpec(keyValue, algo);
        return key;
    }
    public String encrypt(String msg) throws Exception{
        Key key = generateKey();
        Cipher c = Cipher.getInstance(algo);
        c.init(Cipher.ENCRYPT_MODE, key);
        byte[] encVal = c.doFinal(msg.getBytes());
        String encryptedValue = new String(Base64.getEncoder().encode(encVal));
        return encryptedValue;    
    }
    
    public String decrypt(String msg)throws Exception{
        Key key = generateKey();
        Cipher c = Cipher.getInstance(algo);
        c.init(Cipher.DECRYPT_MODE, key);
        byte[] decordedValue = Base64.getDecoder().decode(msg);
        byte[] decValue = c.doFinal(decordedValue);
        String decryptedValue = new String(decValue);
        return decryptedValue;
    }
}

Minta SourceCode atau bertanya langsung tulis saja di kolom komentar

6 comments:

  1. Minta program dan source codenya gan
    email di : sandy.intisel@gmail.com

    ReplyDelete
  2. dah bang coba cek

    ReplyDelete
  3. Minta program dan source code pleasenya gan.
    email saya : almantarigan90@gmail.com

    ReplyDelete
  4. terima kasih kang

    ReplyDelete
  5. cek bang sudah

    ReplyDelete
  6. https://drive.google.com/file/d/0B6HdcdV-m5BaNWh5R2pZbXJqZk0/view?usp=sharing

    ReplyDelete

postingan keren