sms chat

37
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. Kelas terdiri atas metode-metode yang melakukan pekerjaan dan mengembalikan informasi setelah melakukan tugasnya. Beberapa keunggulan java yaitu java merupakan bahasa yang sederhana. Java dirancang agar mudah dipelajari dan digunakan secara efektif. Java tidak menyediakan fitur- fitur yang rumit. Pada bagian kali ini saya akan mencoba untuk membuat suatu aplikasi chatting multiclient sederhana dengan menggunakan tampilan grafis berbasis bahasa pemograman java. Dimana nanti masing-masing client yang terhubung ke jaringan dapat langsung bercakap-cakap secara langsung. Pertama yang harus dilakukan kita terlebih dahulu melakukan setting alamat IP pada masing-masing client. Pada percobaan ini kita akan menggunakan 1 server dan 1 client. Adapun alamat IP nya adalah sebagai berikut : a. Server Ip address : 10.10.10. 1 Netmask : 255.0.0.0

Upload: zanna-bii-sarange

Post on 21-Jul-2016

7 views

Category:

Documents


0 download

DESCRIPTION

mengirim dan menerima sms

TRANSCRIPT

Page 1: Sms Chat

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. Kelas terdiri atas metode-metode yang

melakukan pekerjaan dan mengembalikan informasi setelah melakukan tugasnya.

Beberapa keunggulan java yaitu java merupakan bahasa yang sederhana. Java

dirancang agar mudah dipelajari dan digunakan secara efektif. Java tidak menyediakan

fitur-fitur yang rumit.

Pada bagian kali ini saya akan mencoba untuk membuat suatu aplikasi chatting

multiclient sederhana dengan menggunakan tampilan grafis berbasis bahasa

pemograman java. Dimana nanti masing-masing client yang terhubung ke jaringan

dapat langsung bercakap-cakap secara langsung.

Pertama yang harus dilakukan kita terlebih dahulu melakukan setting alamat IP

pada masing-masing client. Pada percobaan ini kita akan menggunakan 1 server dan 1

client. Adapun alamat IP nya adalah sebagai berikut :

a. Server

Ip address :

10.10.10.1

Netmask :

255.0.0.0

b. Client

Ip address :

10.10.10.2

Netmask :

255.0.0.0

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.

Page 2: Sms Chat

Lalu install Textpad versi 7 dan jdk versi 7 pada masing-masing komputer.

Kemudian langkah selanjutnya kita mengetikan listing program java untuk aplikasi

chatting ini dengan menggunakan TextPad. Programnya terbagi menjadi dua bagian

yaitu bagian server dan client. Adapun listing programnya adalah sebagai berikut.

1. ChatServer.javaimport

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

ChatServ

er()

{ this.p

ort =

9999;

clients = new ArrayList();}

public void

start()

{ keepGo

Page 3: Sms Chat

ing =

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

{ serverSock

et.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();

} catch (IOException ioE) {}

}} catch (Exception e) {

Page 4: Sms Chat

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.");}

}}

ChatServer.ClientThread t = new ChatServer.ClientThread(socket); clients.add(t);t.start();send("login~" + t.username + "~" +

t.username + " sedang login...~Server~\n");}try

{ serverSock

et.close();

for (int i = 0; i <

Page 5: Sms Chat

clients.size(); ++i) { ChatServer.ClientThread tc = clients.get(i); try {

tc.sInput.close();tc.sOutput.close();tc.socket.close();

} 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()

Page 6: Sms Chat

{ String s = "";

for (ClientThread clientThread : clients) { s += clientThread.username + ":";

}s += "---";

System.out.print

ln(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 7: Sms Chat

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

Page 8: Sms Chat

; try {

message =

sInput.readObject().toString();

} catch (IOException e) {

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

"postTex

t":

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 +

Page 9: Sms Chat

"~\n";send(response);break;case "logout":

response = "logout~" + pengirim + "~" + text + "~" + kepada +

"~\n";send(response);brea

k;

case

"list

":

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

}}

remove(id);

close();}

private void

close() {

try {

if (sOutput !

= null) {

sOutput.c

lose();

}} catch (Exception e) { } try {

Page 10: Sms Chat

if (sInput !

= null)

{ sInput

.close()

;

} } catch (Exception e) { } try {

if (socket !

= null)

{ socket

.close()

;

} } catch (Exception e) { }

}

private boolean

writeMsg(String msg) {

if (!

socket.isConnected())

{

close

();

retur

n

false

;

}try

{ sOutput.write

Object(msg);

Page 11: Sms Chat

} catch (IOException e) {System.out.println("Error sending message to " + username); System.out.println(e.toString());

}return true;

}}

}

2. ChatClient.java

import java.io.IOException;

import

java.io.ObjectInputStream;

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 {

/**

Page 12: Sms Chat

* 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();

}

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

Page 13: Sms Chat

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");

} 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.S

EVERE, null, ex);

Page 14: Sms Chat

}

try {

if (input !=

null)

{ input.close

();

}} catch (Exception e) { } try {

if (output !=

null)

{ output.clos

e();

} } catch (Exception e) { }try {

if (socket !=

null)

{ socket.clos

e();

}} 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. */

Page 15: Sms Chat

@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();

kirimButton = new

javax.swing.JButton(); lbljpg = new

javax.swing.JLabel(new

ImageIcon("D:/nikii.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);

Page 16: Sms Chat

viewTextArea.setLineWrap(true);viewTextArea.setRows(5);viewTextArea.setFocusable(false);jScrollPane1.setViewportView(viewTextArea);

jScrollPane2.setViewportView(clientTable);

postTextField.addActionListe

ner(new

java.awt.event.ActionListener() {

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

{postTextFieldActionPerformed(evt);

}

});

kirimButton.setText("Kirim");

kirimButton.addActionListe

ner(new

java.awt.event.ActionListener() {

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

{kirimButtonActionPerformed(evt);

}});

jLabel2.setText("Server");

serverTextField.setText("127.0.0.1");

jLabel3.setText("Port");

portTextField.setText("9999");

masukButton.setText("Masuk");

Page 17: Sms Chat

masukButton.addActionListe

ner(new

java.awt.event.ActionListener() {

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

{masukButtonActionPerformed(evt);

}});

jLabel4.setText("Username");

usernameTextField.setText("niki");

javax.swing.GroupLayout

layout = new

javax.swing.GroupLayout(getContentP

ane());

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()

Page 18: Sms Chat

.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)

.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,

Page 19: Sms Chat

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).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(usernameTextFiel

d,

javax.swing.GroupLayout.PREFERR

ED_SIZE,

Page 20: Sms Chat

javax.swing.GroupLayout.DEFAULT_

SIZE,

javax.swing.GroupLayout.PREFERRE

D_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()));

pack();

}// </editor-fold>

private void

Page 21: Sms Chat

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.Action

Event evt) {

// TODO add your handling

code here:

kirimButtonActionPerformed(ev

Page 22: Sms Chat

t);

}

/**

* @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/lookan

dfeel/plaf.htm l

*/

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 23: Sms Chat

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() {

@Overridepublic 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

Page 24: Sms Chat

jScrollPane1; private

javax.swing.JScrollPane jScrollPane2;

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 {

@Overridepublic void run() {while (true) {

try {Strin

gmsg = (String) input.readObject();

String res;

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

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

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

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

switch (type) {

case "recieveText":res = pengirim + ": " + text;

viewTextArea.setText(viewTextArea.

getText()

Page 25: Sms Chat

+ res + "\n");break;

case "recievePrivateText":TEKNIK KOMPUTER POLSRI

res = pengirim + ": " +

text; if

(kepada.equals(username)

) {

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

}break;

case

"login":

viewTextArea.setText(viewTextArea.

getText() + pengirim + " sedah 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;

Page 26: Sms Chat

} catch (ClassNotFoundException e2) {}

}}

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));

}

}}

Jika kedua program telah selesai dibuat maka kita compile program tersebut

dengan menekan tombol CTRL + 1. Jika progam tidak memiliki kesalahan akan timbul

pesan Tool Compiled Successfully. Kemudian jalankan program. Adapun hasil

programnya adalah sebagai berikut :

Page 27: Sms Chat
Page 28: Sms Chat
Page 29: Sms Chat
Page 30: Sms Chat
Page 31: Sms Chat
Page 32: Sms Chat