Top Banner
TUGAS Membuat Program MultiClient Chatting Client- Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis Oleh : Andika Tri Raharja 061130701292 6TCB JURUSAN TEKNIK KOMPUTER
28

Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

Feb 03, 2018

Download

Documents

vuliem
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

TUGAS

Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis

Oleh :

Andika Tri Raharja

061130701292

6TCB

JURUSAN TEKNIK KOMPUTER

POLITEKNIK NEGERI SRIWIJAYA PALEMBANG

2014

Page 2:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

Chatting memungkinkan kita untuk selalu bisa berkomunikasi walaupun kita tidak berada bersamanya di suatu tempat. Aplikasi chatting merupakan suatu aplikasi yang memungkinkan pengguna (client) berkomunikasi teks secara langsung (Real Time) dengan pengguna lain dengan menggunakan media yang ada.

Java merupakan suatu bahasa pemograman yang multi platform dan multi device. Java juga merupakan bahasa pemograman yang berorientasi objek dan program java tersusun dari bagian yang disebut kelas.

Pada bagian ini, saya akan membuat aplikasi chatting berbasis grafis (seperti tampilan foto) menggunakan bahasa pemograman java. pertama yang harus dilakukan adalah menyetting alamat IP pada masing-masing PC. Kita menggunakan satu server dan satu client. 

Pertama yang harus dilakukan kita terlebih dahulu melakukan setting alamat IP pada masing-masing client. Setelah melakukan konfigurasi IP pada masing-masingi komputer kemudian kita juga harus memastikan bahwa firewall pada masing-masing komputer harus diaktifkan karena pada beberapa kasus program ini tidak dapat saling terkoneksi akibat firewall yang aktif pada sistem operasinya.

Berikut adalah listing program MultiClient Chatting Client-Server berbasis grafis (gambar)

ChatServer.java

import java.io.*;

import java.net.*;

import java.util.*;

public class ChatServer {

private static int uniqueId;

private ArrayList<ChatServer.ClientThread> clients;

private int port;

private boolean keepGoing;

public ChatServer() {

this.port = 9999;

Page 3:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

clients = new ArrayList();

}

public void start() {

keepGoing = true;

try {

ServerSocket serverSocket = new ServerSocket(port);

while (keepGoing) {

System.out.println("ChatServer waiting for Clients on port " + port + ".");

Socket socket = serverSocket.accept();

if (!keepGoing) {

break;

}

ChatServer.ClientThread t = new ChatServer.ClientThread(socket);

clients.add(t);

t.start();

send("login~" + t.username + "~" + t.username + " sedang login...~Server~\n");

}

try {

serverSocket.close();

for (int i = 0; i < clients.size(); ++i) {

ChatServer.ClientThread tc = clients.get(i);

try {

tc.sInput.close();

tc.sOutput.close();

tc.socket.close();

Page 4:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

} catch (IOException ioE) {

}

}

} catch (Exception e) {

System.out.println("Exception closing the server and clients: " + e);

}

} catch (IOException e) {

String msg = "Exception on new ServerSocket: " + e + "\n";

System.out.println(msg);

}

}

private synchronized void send(String message) {

for (int i = clients.size(); --i >= 0;) {

ChatServer.ClientThread ct = clients.get(i);

if (!ct.writeMsg(message)) {

clients.remove(i);

System.out.println("Disconnected Client " + ct.username + " removed from list.");

}

}

}

private String getClients() {

String s = "";

for (ClientThread clientThread : clients) {

s += clientThread.username + ":";

Page 5:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

}

s += "---";

System.out.println(s);

return s;

}

private synchronized void remove(int id) {

for (int i = 0; i < clients.size(); ++i) {

ChatServer.ClientThread ct = clients.get(i);

if (ct.id == id) {

clients.remove(i);

return;

}

}

}

public static void main(String[] args) {

ChatServer server = new ChatServer();

server.start();

}

private class ClientThread extends Thread {

private Socket socket;

private ObjectInputStream sInput;

private ObjectOutputStream sOutput;

private int id;

private String username;

Page 6:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

public ClientThread(Socket socket) {

id = ++uniqueId;

this.socket = socket;

System.out.println("Menciptakan Object Input/Output Streams");

try {

sOutput = new ObjectOutputStream(socket.getOutputStream());

sInput = new ObjectInputStream(socket.getInputStream());

String message = (String) sInput.readObject();

username = message.split("~")[1];

System.out.println(username + " masuk.");

} catch (IOException e) {

System.out.println("Exception creating new Input/output Streams: " + e);

} catch (ClassNotFoundException e) {

}

}

@Override

public void run() {

boolean keepGoing = true;

while (keepGoing) {

String message;

try {

message = sInput.readObject().toString();

} catch (IOException e) {

Page 7:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

System.out.println(username + " Exception reading Streams: " + e);

break;

} catch (ClassNotFoundException e2) {

break;

}

String type = message.split("~")[0];

String pengirim = message.split("~")[1];

String text = message.split("~")[2];

String kepada = message.split("~")[3];

String response;

switch (type) {

case "postText":

response = "recieveText~" + pengirim + "~" + text + "~" + kepada + "~\n";

send(response);

break;

case "postPrivateText":

response = "recievePrivateText~" + pengirim + "~" + text + "~" + kepada + "~\n";

send(response);

break;

case "login":

response = "login~" + pengirim + "~" + text + "~" + kepada + "~\n";

send(response);

break;

case "logout":

Page 8:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

response = "logout~" + pengirim + "~" + text + "~" + kepada + "~\n";

send(response);

break;

case "list":

response = "list~server~" + getClients() + "~ ~ ~ ~ ~\n";

send(response);

break;

}

}

remove(id);

close();

}

private void close() {

try {

if (sOutput != null) {

sOutput.close();

}

} catch (Exception e) {

}

try {

if (sInput != null) {

sInput.close();

}

} catch (Exception e) {

}

Page 9:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

try {

if (socket != null) {

socket.close();

}

} catch (Exception e) {

}

}

private boolean writeMsg(String msg) {

if (!socket.isConnected()) {

close();

return false;

}

try {

sOutput.writeObject(msg);

} catch (IOException e) {

System.out.println("Error sending message to " + username);

System.out.println(e.toString());

}

return true;

}

}

}

ChatClient.java

import java.io.IOException;

import java.io.ObjectInputStream;

Page 10:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.util.ArrayList;

import java.util.List;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.swing.ImageIcon;

import javax.swing.JLabel;

import javax.swing.table.DefaultTableModel;

public class ChatClient extends javax.swing.JFrame {

/**

* Creates new form ChatClient

*/

private ObjectInputStream input;

private ObjectOutputStream output;

private Socket socket;

private String server, username;

private int port;

private List<String> clients;

public ChatClient() {

clients = new ArrayList();

initComponents();

}

Page 11:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

public boolean start() {

try {

socket = new Socket(server, port);

} catch (Exception ec) {

System.out.println("Error connectiong to server:" + ec);

return false;

}

String msg = "Connection accepted " + socket.getInetAddress() + ":" + socket.getPort();

System.out.println(msg);

try {

input = new ObjectInputStream(socket.getInputStream());

output = new ObjectOutputStream(socket.getOutputStream());

} catch (IOException eIO) {

System.out.println("Exception creating new Input/output Streams: " + eIO);

return false;

}

new ChatClient.ListenFromServer().start();

try {

output.writeObject("login~" + username + "~" + username + " sedang login...~server~\n");

output.writeObject("list~" + username + "~" + username + " sedang login...~server~\n");

Page 12:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

} catch (IOException eIO) {

System.out.println("Exception doing login : " + eIO);

disconnect();

return false;

}

return true;

}

private void disconnect() {

try {

// TODO add your handling code here:

output.writeObject("logout~" + username + "~" + username + " sudah logout...~Server~\n");

} catch (IOException ex) {

//Logger.getLogger(ChatClient.class.getName()).log(Level.SEVERE, null, ex);

}

try {

if (input != null) {

input.close();

}

} catch (Exception e) {

}

try {

if (output != null) {

Page 13:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

output.close();

}

} catch (Exception e) {

}

try {

if (socket != null) {

socket.close();

}

} catch (Exception e) {

}

}

/**

* This method is called from within the constructor to initialize the form.

* WARNING: Do NOT modify this code. The content of this method is always

* regenerated by the Form Editor.

*/

@SuppressWarnings("unchecked")

// <editor-fold defaultstate="collapsed" desc="Generated Code">

private void initComponents() {

jScrollPane1 = new javax.swing.JScrollPane();

viewTextArea = new javax.swing.JTextArea();

jScrollPane2 = new javax.swing.JScrollPane();

clientTable = new javax.swing.JTable();

postTextField = new javax.swing.JTextField();

Page 14:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

kirimButton = new javax.swing.JButton();

lbljpg = new javax.swing.JLabel(new ImageIcon("E:/rara.jpg"));

jLabel2 = new javax.swing.JLabel();

serverTextField = new javax.swing.JTextField();

jLabel3 = new javax.swing.JLabel();

portTextField = new javax.swing.JTextField();

masukButton = new javax.swing.JButton();

jLabel4 = new javax.swing.JLabel();

usernameTextField = new javax.swing.JTextField();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

viewTextArea.setEditable(false);

viewTextArea.setColumns(20);

viewTextArea.setLineWrap(true);

viewTextArea.setRows(5);

viewTextArea.setFocusable(false);

jScrollPane1.setViewportView(viewTextArea);

jScrollPane2.setViewportView(clientTable);

postTextField.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

postTextFieldActionPerformed(evt);

}

Page 15:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

});

kirimButton.setText("Kirim");

kirimButton.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

kirimButtonActionPerformed(evt);

}

});

jLabel2.setText("Server");

serverTextField.setText("10.17.0.0");

jLabel3.setText("Port");

portTextField.setText("9999");

masukButton.setText("Masuk");

masukButton.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

masukButtonActionPerformed(evt);

}

});

jLabel4.setText("Username");

Page 16:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

usernameTextField.setText("Rara Ariesta");

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addContainerGap()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()

.addComponent(postTextField)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addComponent(kirimButton))

.addComponent(jScrollPane1))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 259, javax.swing.GroupLayout.PREFERRED_SIZE))

.addGroup(layout.createSequentialGroup()

.addComponent(lbljpg)

.addComponent(jLabel2)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

Page 17:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

.addComponent(serverTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 167, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(18, 18, 18)

.addComponent(jLabel3)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addComponent(portTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(18, 18, 18)

.addComponent(jLabel4)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addComponent(usernameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 194, Short.MAX_VALUE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addComponent(masukButton)))

.addContainerGap())

);

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()

.addContainerGap()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(lbljpg)

.addComponent(jLabel2)

Page 18:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

.addComponent(serverTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(jLabel3)

.addComponent(portTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(masukButton)

.addComponent(jLabel4)

.addComponent(usernameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 427, Short.MAX_VALUE)

.addGroup(layout.createSequentialGroup()

.addComponent(jScrollPane1)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(postTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(kirimButton))))

.addContainerGap())

);

Page 19:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

pack();

}// </editor-fold>

private void masukButtonActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

this.server = serverTextField.getText();

this.port = new Integer(portTextField.getText());

this.username = usernameTextField.getText();

start();

}

private void kirimButtonActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

try {

String message = "postText~" + username + "~" + postTextField.getText() + "~all~\n";

output.writeObject(message);

postTextField.setText("");

} catch (IOException ex) {

Logger.getLogger(ChatClient.class.getName()).log(Level.SEVERE, null, ex);

}

}

private void postTextFieldActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

Page 20:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

kirimButtonActionPerformed(evt);

}

/**

* @param args the command line arguments

*/

public static void main(String args[]) {

/* Set the Nimbus look and feel */

//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">

/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.

* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html

*/

try {

for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {

if ("Nimbus".equals(info.getName())) {

javax.swing.UIManager.setLookAndFeel(info.getClassName());

break;

}

}

} catch (ClassNotFoundException ex) {

java.util.logging.Logger.getLogger(ChatClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (InstantiationException ex) {

Page 21:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

java.util.logging.Logger.getLogger(ChatClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (IllegalAccessException ex) {

java.util.logging.Logger.getLogger(ChatClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (javax.swing.UnsupportedLookAndFeelException ex) {

java.util.logging.Logger.getLogger(ChatClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

}

//</editor-fold>

/* Create and display the form */

java.awt.EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

new ChatClient().setVisible(true);

}

});

}

// Variables declaration - do not modify

private javax.swing.JTable clientTable;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel3;

private javax.swing.JLabel jLabel4;

private javax.swing.JScrollPane jScrollPane1;

private javax.swing.JScrollPane jScrollPane2;

Page 22:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

private javax.swing.JButton kirimButton;

private javax.swing.JButton masukButton;

private javax.swing.JTextField portTextField;

private javax.swing.JTextField postTextField;

private javax.swing.JTextField serverTextField;

private javax.swing.JTextField usernameTextField;

private javax.swing.JTextArea viewTextArea;

private JLabel lbljpg ;

// End of variables declaration

class ListenFromServer extends Thread {

@Override

public void run() {

while (true) {

try {

String msg = (String) input.readObject();

String res;

String type = msg.split("~")[0];

String pengirim = msg.split("~")[1];

String text = msg.split("~")[2];

String kepada = msg.split("~")[3];

switch (type) {

case "recieveText":

res = pengirim + ": " + text;

viewTextArea.setText(viewTextArea.getText() + res + "\n");

break;

Page 23:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

case "recievePrivateText":

res = pengirim + ": " + text;

if (kepada.equals(username)) {

viewTextArea.setText(viewTextArea.getText() + res + "\n");

}

break;

case "login":

viewTextArea.setText(viewTextArea.getText() + pengirim + " sudah login..." + "\n");

clients.add(pengirim);

break;

case "logout":

viewTextArea.setText(viewTextArea.getText() + pengirim + " telah logout..." + "\n");

clients.remove(pengirim);

break;

case "list":

setTable(text);

break;

}

} catch (IOException e) {

System.out.println("Server has close the connection: " + e);

break;

} catch (ClassNotFoundException e2) {

}

}

Page 24:    Web viewTUGAS. Membuat Program MultiClient Chatting Client-Server Menggunakan Bahasa Pemrograman Java Berbasis Grafis. Oleh : Andika Tri R. aharja. 061130701292

}

private void setTable(String text) {

int rows = text.split(":").length - 1;

Object[][] data = new Object[rows][1];

for (int i = 0; i < rows; i++) {

String t = text.split(":")[i];

data[i][0] = t;

}

String[] header = {"Clients"};

clientTable.setModel(new DefaultTableModel(data, header));

}

}

}

Pastikan kita sudah terhubung ke internet. Lalu eksekusi program menggunakan ctrl+1 dan ctrl+2, maka tampilan akan seperti berikut: