Rabu, 02 Juli 2014

Membuat Aplikasi Kirim SMS Menggunakan Java J2ME


Membuat Aplikasi Kirim SMS Menggunakan Java J2ME

Program ini digunakan untuk membuat aplikasi kirim sms dengan menggunakan java. Untuk membuatnya, berikut langkah-langkahnya:1. Kita jalankan dulu Sun Java (TM) Wireless Toolkit 2.5.2. Setelah itu, klik New Project, di  ProjectName  kita  ketikkan  nama  project  kita sesuai  keinginan,  misalnya  sms,  di MIDlet Class Name ketikkan tulisan yang sama, Lalu klik Create Project.



2. Selanjutnya  akan muncul  kotak  dialog  setting, kita  klik  OK  saja. Setelah  itu akan tampil tulisan
a. Creating project “smsKu”
b.   Place Java source files in “I:\Documents and
Settings\miae\j2mewtk\2.5.2\apps\smsKu\src”
Ket: Disinilah tempat kita menyimpan source atau koding program yang kita buat yaitu pada direktori SRC
c.   Place Aplication resource files in “I:\Documents and
Settings\miae\j2mewtk\2.5.2\apps\smsKu\res”
Ket: Disinilah tempat kita menyimpan  file gambar atau animasi yang kita buat yaitu pada direktori RES
3.  Kita beralih ke TextPad, dan ketikkan listing progra2.54 berikut:
import java.util.*;
import java.io.IOException; import javax.microedition.io.*; importjavax.microedition.lcdui.*;
import javax.wireless.messaging.*;
importjavax.microedition.midlet.*;

public class smsKu extends MIDlet implements CommandListener, Runnable, MessageListener {

Display display; Form form;
List menuList; //list untuk menu awal
Command exitCom, replyCom, backCom, clrCom, sendCom; //command yg digunakan
TextBox textSmsMasuk, textSmsKeluar; //tempat text sms yg masuk & yg
mau dikirim
TextField textNo; //untuk tempat memasukan no tujuan
String port, isiSmsKeluar; //port dan isi sms
Thread thread; String[] connections; boolean done; MessageConnection smsconn; Message msg;

public smsKu() {
display = Display.getDisplay(this);
form = new Form("sms-an Yuk");

display.setCurrent(textSmsKeluar);
} else if (c == sendCom) {
isiSmsKeluar = textSmsKeluar.getString();
textSmsKeluar.setString("");
kirim();
}
}
}

public void run() { //untuk menerima sms yang masuk try {
msg = smsconn.receive();
String senderAddress = msg.getAddress(); Date waktuSms = msg.getTimestamp();
if (msg instanceof TextMessage) {
String isiSmsMasuk = ((TextMessage) msg).getPayloadText();
terima(isiSmsMasuk, senderAddress, waktuSms);//memasukan sms ke texbok
} tutupKoneksi(); bukaKoneksi();
} catch (IOException e) {
}
}

public void notifyIncomingMessage(MessageConnection conn) {
if (thread == null) {
done = false;
thread = new Thread(this);
thread.start();
}
}
}

4. Simpan  program  tersebut  pada  direktori  src  seperti  di  atas  dengan  nama  dini.java (nama file harus sama dengan nama kelas pada saat kita membuat new project). Selanjutnya kita kembali lagi ke Sun Java (TM) Wireless Toolkit 2.5.2_01 for CLDC.

5. Kemudian, klik Build untuk mengetahui apakah program  yang kita buat sudah benar atau   belum.  Jika  masih   terdapat   kesalahan   maka  perhatikan   kesalahannya   pada baris. Kesalahan dan lokasi kesalahan yang ditunjukan pada layar konsul.  Perbaiki kesalahan  program  tersebut hingga  selesai simpan  dan ulangi Build kembali. Setelah proses build selesai jika tidak terdapat kesalahan, klik Run. Kita bisa coba jalankan aplikasi buatan kita. Dalam percobaan aplikasi ini, kita klik Run sebanyak 2kali agar tampilan handphone menjadi 2 buah dengan nomor yang berbeda.

6. Berikut adalah urutan hasil tampilan aplikasi yang telah dibuat.


 Tampilan Ketika Program Dijalankan


Tampilan Awal Program dan Tulis SMS kirim nomor sesuai nomor tujuan



Tampilan ketika SMS yang dikirim telah sampai di nomor tujuan

Cara memindahkan file Aplikasi SMS j2me ke dalam Handphone
1. Buka aplikasi Sun Java (TM) Wireless Toolkit 2.5.2_01 for CLDC.   Lalu klik Open Project. Lalu pilih project nya kemudian klik lagi open project.



2.  Build terlebih dahulu aplikasi yang akan dipindahkan ke handphone dengan cara klik tombol Build seperti gambar di bawah ini.

 3.  Setelah build selesai, klik tab Package, lalu klik Create Package.

4. Setelah package selesai, buka aplikasi pada folder penyimpanan project di folder bin.
Dalam hal ini folder  terletak  di I:\Users\miae\j2mewtk\2.5.2\apps\smsKu.
5.  Isi folder bin tadi adalah seperti di gambar di bawah ini. File yang akan dipindahkan  ke dalam  handphone  adalah file dengan ekstensi .jar atau Executable Jar File.



exitCom = new Command("keluar", Command.EXIT, 1); replyCom = new Command("balas", Command.SCREEN, 1); backCom = new Command("Kembali", Command.BACK, 3); clrCom = new Command("Hapus Tulisan", Command.OK, 2); sendCom = new Command("Kirim", Command.OK, 1); menuList = new List("Menu sms Ku", List.IMPLICIT);

port = "4321"; //port yang aku gunakan, ganti sesuai keinginan masing masing

textSmsMasuk = new TextBox(null, null, 500, TextField.ANY);
textSmsKeluar = new TextBox("Silakan Menulis Sms", null,
500, TextField.ANY);
textNo = new TextField("Masukan Nomor Tujuan", "",
15, TextField.PHONENUMBER);
}

public void startApp() {
bukaKoneksi(); //disini membuka koneksi untuk siap menerima sms masuk menu(); // bikin tampilan menu awal
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {

//sebelum aplikasinya keluar ato mati koneksi ditutup dulu done = true;
thread = null;
if (smsconn != null) {
try {
smsconn.close();
} catch (IOException e) {
}
}

//disini mati deh aplikasi kita notifyDestroyed();
}

public void menu() { //membuat menu awal untuk sementara ini baru ada 3 menu
menuList.append("Tulis Sms", null);//1. menu tulis sms baru menuList.append("about", null);//2. menu about (gak penting sih sebenarnya)

menuList.append("Keluar", null);//3. menu untuk keluar aplikasi menuList.addCommand(exitCom); //add command keluar menuList.setCommandListener(this);
display.setCurrent(menuList);
}
public void tulisSms() { //membuat textbox untuk menulis sms baru textSmsKeluar.addCommand(sendCom); //add command untuk kirim
textSmsKeluar.addCommand(clrCom); // add command untuk clear text textSmsKeluar.addCommand(backCom); //add command untuk kembali kemenu awal
textSmsKeluar.setCommandListener(this);
display.setCurrent(textSmsKeluar);
}

public void masukNo() { //disini untuk memasukan nomor tujuan form.setTitle("Sms Siap dikirim"); //udah taukan yang ini? form.append(textNo); //menambahkan textField untuk nomor tujuan form.addCommand(backCom); //menambahkan command untuk kembali ke menu awal
form.addCommand(sendCom); //menambahkan command untuk mengirim
form.setCommandListener(this);
display.setCurrent(form);
}

public void kirim() { //disini sms yang udah ditulis dikirim dgn perintah
new Thread(new Runnable() {
//perhatiin ya public void run() { try {
String isiSms = isiSmsKeluar;
String noTujuan = textNo.getString();
String address = "sms://" + noTujuan + ":" + port;

MessageConnection smsConnKir = null; Message isiSmsNya = null;
smsConnKir = (MessageConnection) Connector.open(address); TextMessage txtmessage =
(TextMessage) smsConnKir.newMessage(MessageConnection.TEXT_MESSAGE);
txtmessage.setAddress(address); txtmessage.setPayloadText(isiSms); isiSmsNya = txtmessage; smsConnKir.send(isiSmsNya);

} catch (Throwable t) {
t.printStackTrace();
}
}
}).start();

public void terima(String isi, String no, Date tgl) { //tempat sms masuk
String nonya = fixNomer(no);
textSmsMasuk = new TextBox("Sms dari:" + nonya + " " + tgl, isi, isi.length(), TextField.ANY);
textSmsMasuk.addCommand(replyCom);
textSmsMasuk.addCommand(exitCom); textSmsMasuk.setCommandListener(this); display.setCurrent(textSmsMasuk);
}

public void bukaKoneksi() { //membuka koneksi agar bisa menerima sms yg masuk
String smsConnection = "sms://:" + port;
done = true;
thread = null;

try {
smsconn = (MessageConnection) Connector.open(smsConnection);
smsconn.setMessageListener(this);
} catch (IOException ioe) {
ioe.printStackTrace();
}

connections = PushRegistry.listConnections(true);

done = false;
thread = new Thread(this);
thread.start();

}

public void tutupKoneksi() { //untuk menutup koneksi sms try {
smsconn.close();
} catch (IOException e) {
}
}

public String fixNomer(String no) {
//dari format no gini "sms://+6285XXXX" jadi "+6285XXX" gitu fungsinya

String hs = null;
hs = no.substring(6, no.length());
return hs;
}

public void commandAction(Command c, Displayable d) {
if (c == exitCom) {
destroyApp(true);
}
if (d == menuList) {
if (menuList.isSelected(0)) {
tulisSms();
} else if (menuList.isSelected(1)) {
Alert about = new Alert("About", "Selamat Datang di Fhadil, " + "Mari Belajar Java",
null, AlertType.INFO);
display.setCurrent(about);
} else if (menuList.isSelected(2)) {
destroyApp(true);
}
}

if (d == textSmsKeluar) { if (c == sendCom) { form.deleteAll(); masukNo();
} else if (c == clrCom) {
textSmsKeluar.setString("");
} else if (c == backCom) {
display.setCurrent(menuList);
}
}
if (d == textSmsMasuk) { if (c == exitCom) { display.setCurrent(menuList);
} else if (c == replyCom) {


tulisSms();

}
}
if (d == form) {
if (c == backCom) {
form.deleteAll();

exitCom = new Command("keluar", Command.EXIT, 1); replyCom = new Command("balas", Command.SCREEN, 1); backCom = new Command("Kembali", Command.BACK, 3); clrCom = new Command("Hapus Tulisan", Command.OK, 2); sendCom = new Command("Kirim", Command.OK, 1); menuList = new List("Menu sms Ku", List.IMPLICIT);

port = "4321"; //port yang aku gunakan, ganti sesuai keinginan masing masing

textSmsMasuk = new TextBox(null, null, 500, TextField.ANY);
textSmsKeluar = new TextBox("Silakan Menulis Sms", null,
500, TextField.ANY);
textNo = new TextField("Masukan Nomor Tujuan", "",
15, TextField.PHONENUMBER);
}

public void startApp() {
bukaKoneksi(); //disini membuka koneksi untuk siap menerima sms masuk menu(); // bikin tampilan menu awal
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {

//sebelum aplikasinya keluar ato mati koneksi ditutup dulu done = true;
thread = null;
if (smsconn != null) {
try {
smsconn.close();
} catch (IOException e) {
}
}

//disini mati deh aplikasi kita
notifyDestroyed();
}
public void menu() { //membuat menu awal untuk sementara ini baru ada 3 menu
menuList.append("Tulis Sms", null);//1. menu tulis sms baru menuList.append("about", null);//2. menu about (gak penting sih sebenarnya)

menuList.append("Keluar", null);//3. menu untuk keluar aplikasi menuList.addCommand(exitCom); //add command keluar menuList.setCommandListener(this);
display.setCurrent(menuList);
}

public void tulisSms() { //membuat textbox untuk menulis sms baru textSmsKeluar.addCommand(sendCom); //add command untuk kirim
textSmsKeluar.addCommand(clrCom); // add command untuk clear text textSmsKeluar.addCommand(backCom); //add command untuk kembali kemenu awal
textSmsKeluar.setCommandListener(this);
display.setCurrent(textSmsKeluar);
}

public void masukNo() { //disini untuk memasukan nomor tujuan form.setTitle("Sms Siap dikirim"); //udah taukan yang ini? form.append(textNo); //menambahkan textField untuk nomor tujuan form.addCommand(backCom); //menambahkan command untuk kembali ke menu awal
form.addCommand(sendCom); //menambahkan command untuk mengirim
form.setCommandListener(this);
display.setCurrent(form);
}

public void kirim() { //disini sms yang udah ditulis dikirim dgn perintah
new Thread(new Runnable() {
//perhatiin ya public void run() { try {
String isiSms = isiSmsKeluar;
String noTujuan = textNo.getString();
String address = "sms://" + noTujuan + ":" + port; MessageConnection smsConnKir = null;

Message isiSmsNya = null;
smsConnKir = (MessageConnection) Connector.open(address); TextMessage txtmessage =

(TextMessage) smsConnKir.newMessage(MessageConnection.TEXT_MESSAGE);
txtmessage.setAddress(address); txtmessage.setPayloadText(isiSms); isiSmsNya = txtmessage; smsConnKir.send(isiSmsNya);


} catch (Throwable t) {
t.printStackTrace();
}
}
}).start();
}

public void terima(String isi, String no, Date tgl) { //tempat sms masuk
String nonya = fixNomer(no);
textSmsMasuk = new TextBox("Sms dari:" + nonya + " " + tgl, isi, isi.length(), TextField.ANY);
textSmsMasuk.addCommand(replyCom);
textSmsMasuk.addCommand(exitCom); textSmsMasuk.setCommandListener(this); display.setCurrent(textSmsMasuk);
}

public void bukaKoneksi() { //membuka koneksi agar bisa menerima sms yg masuk
String smsConnection = "sms://:" + port;
done = true;
thread = null;

try {
smsconn = (MessageConnection) Connector.open(smsConnection);
smsconn.setMessageListener(this);
} catch (IOException ioe) {
ioe.printStackTrace();
}

connections = PushRegistry.listConnections(true);

done = false;
thread = new Thread(this);

thread.start();
}

public void tutupKoneksi() { //untuk menutup koneksi sms try {
smsconn.close();
} catch (IOException e) {
}
}

public String fixNomer(String no) {
//dari format no gini "sms://+6285XXXX" jadi "+6285XXX" gitu fungsinya

String hs = null;
hs = no.substring(6, no.length());
return hs;
}

public void commandAction(Command c, Displayable d) {
if (c == exitCom) {
destroyApp(true);
}
if (d == menuList) {
if (menuList.isSelected(0)) {
tulisSms();
} else if (menuList.isSelected(1)) {
Alert about = new Alert("About", "Selamat Datang di Fhadil, " + "Mari Belajar Java",
null, AlertType.INFO);
display.setCurrent(about);
} else if (menuList.isSelected(2)) {
destroyApp(true);
}
}
if (d == textSmsKeluar) { if (c == sendCom) { form.deleteAll(); masukNo();
} else if (c == clrCom) {
textSmsKeluar.setString("");
} else if (c == backCom) {
display.setCurrent(menuList);
}
}
if (d == textSmsMasuk) { if (c == exitCom) { display.setCurrent(menuList);
} else if (c == replyCom) {


tulisSms();
}
}
if (d == form) {
if (c == backCom) {
form.deleteAll();

jika ingin lebih jelasnya silahkan klik link di bawah ini :

download

Chatting dengan Beberapa PC/Laptop

Pemrograman Jaringan Komputer
Chatting dengan Beberapa PC/Laptop

Program ini digunakan untuk chating dengan beberapa PC/Laptop. Berikut adalah listing codenya.
MultiThreadChatServer.java
import java.io.DataInputStream;
import java.io.PrintStream;
import java.io.IOException;
import java.net.Socket;
import java.net.ServerSocket;

/*
 * chat server yang mengantar pesan publik dan private.
 */
public class MultiThreadChatServer {

  // server socket.
  private static ServerSocket serverSocket = null;
  // client socket.
  private static Socket clientSocket = null;

  // chat server dapat menerima sampai maxClientsCount pada koneksi client.
  private static final int maxClientsCount = 10;
  private static final clientThread[] threads = new clientThread[maxClientsCount];

  public static void main(String args[]) {

    // default port number.
    int portNumber = 2222;
    if (args.length < 1) {
      System.out
          .println("Usage: java MultiThreadChatServer <portNumber>\n"
              + "Now using port number=" + portNumber);
    } else {
      portNumber = Integer.valueOf(args[0]).intValue();
    }

    /*
     * buka server socket pada portNumber (default 2222). catatan:kita tidak da
     * pat memilih port dibawah 1023 jika kita bukan administrator (root).
     */
    try {
      serverSocket = new ServerSocket(portNumber);
    } catch (IOException e) {
      System.out.println(e);
    }

    /*
     * buat client socket untuk setiap koneksi dan sesuaikan dengan thread
     * client baru.
     */
    while (true) {
      try {
        clientSocket = serverSocket.accept();
        int i = 0;
        for (i = 0; i < maxClientsCount; i++) {
          if (threads[i] == null) {
            (threads[i] = new clientThread(clientSocket, threads)).start();
            break;
          }
        }
        if (i == maxClientsCount) {
          PrintStream os = new PrintStream(clientSocket.getOutputStream());
          os.println("Server too busy. Try later.");
          os.close();
          clientSocket.close();
        }
      } catch (IOException e) {
        System.out.println(e);
      }
    }
  }
}

/*
 * Thread chat client . thread client ini membuka input dan output
 * streams untuk hubungan client, menanyakan nama client,menginformasikan semua
 * client yang terhubung ke server bahwa ada client baru yang terhubung ke da-
 * lam chatroom, selama data diterima, data di kembalikan ke semua
 * client. saat client meninggalkan chatroom thread ini juga menginformasikan
 * pada client lainnya.
 */
class clientThread extends Thread {

  private DataInputStream is = null;
  private PrintStream os = null;
  private Socket clientSocket = null;
  private final clientThread[] threads;
  private int maxClientsCount;

  public clientThread(Socket clientSocket, clientThread[] threads) {
    this.clientSocket = clientSocket;
    this.threads = threads;
    maxClientsCount = threads.length;
  }

  public void run() {
    int maxClientsCount = this.maxClientsCount;
    clientThread[] threads = this.threads;

    try {
      /*
       * membuat input dan output streams  untuk client.
       */
      is = new DataInputStream(clientSocket.getInputStream());
      os = new PrintStream(clientSocket.getOutputStream());
      os.println("Enter your name.");
      String name = is.readLine().trim();
      os.println("Hello " + name
          + " to our chat room.\nTo leave enter /quit in a new line");
      for (int i = 0; i < maxClientsCount; i++) {
        if (threads[i] != null && threads[i] != this) {
          threads[i].os.println("*** A new user " + name
              + " entered the chat room !!! ***");
        }
      }
      while (true) {
        String line = is.readLine();
        if (line.startsWith("/quit")) {
          break;
        }
        for (int i = 0; i < maxClientsCount; i++) {
          if (threads[i] != null) {
            threads[i].os.println("<" + name + "&gr; " + line);
          }
        }
      }
      for (int i = 0; i < maxClientsCount; i++) {
        if (threads[i] != null && threads[i] != this) {
          threads[i].os.println("*** The user " + name
              + " is leaving the chat room !!! ***");
        }
      }
      os.println("*** Bye " + name + " ***");

      /*
       * buat variabel thread terakhir menjadi null agar client baru
       * dapat diterima oleh server.
       */
      for (int i = 0; i < maxClientsCount; i++) {
        if (threads[i] == this) {
          threads[i] = null;
        }
      }

      /*
       * tutup output stream, tutup input stream, tutup socket.
       */
      is.close();
      os.close();
      clientSocket.close();
    } catch (IOException e) {
    }
  }
}

MultiThreadChatClient.java
import java.io.DataInputStream;
import java.io.PrintStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class MultiThreadChatClient implements Runnable {

  //  client socket
  private static Socket clientSocket = null;
  //  output stream
  private static PrintStream os = null;
  //  input stream
  private static DataInputStream is = null;

  private static BufferedReader inputLine = null;
  private static boolean closed = false;

  public static void main(String[] args) {

    //  default port.
    int portNumber = 2222;
    //  default host.
    String host = "10.17.193.86";

    if (args.length < 2) {
      System.out
          .println("Usage: java MultiThreadChatClient <host> <portNumber>\n"
              + "Now using host=" + host + ", portNumber=" + portNumber);
    } else {
      host = args[0];
      portNumber = Integer.valueOf(args[1]).intValue();
    }

    /*
     * Buka sebuah socket pada host dan port. Buka input dan output streams.
     */
    try {
      clientSocket = new Socket(host, portNumber);
      inputLine = new BufferedReader(new InputStreamReader(System.in));
      os = new PrintStream(clientSocket.getOutputStream());
      is = new DataInputStream(clientSocket.getInputStream());
    } catch (UnknownHostException e) {
      System.err.println("Don't know about host " + host);
    } catch (IOException e) {
      System.err.println("Couldn't get I/O for the connection to the host "
          + host);
    }

    /*
     * Jika semua telah diinisialisasi lalu kita ingin menulis data pada socket yang kita buka pada koneksi port number.
     */
    if (clientSocket != null && os != null && is != null) {
      try {

        /* Buat sebuah thread untuk membaca dari server. */
        new Thread(new MultiThreadChatClient()).start();
        while (!closed) {
          os.println(inputLine.readLine().trim());
        }
        /*
         * tutup output stream, tutup input stream, tutup socket.
         */
        os.close();
        is.close();
        clientSocket.close();
      } catch (IOException e) {
        System.err.println("IOException:  " + e);
      }
    }
  }

  /*
   * buat sebuah thread untuk membaca dari server.
   */
  public void run() {
    /*
     * tetap membaca dari socket sampai kita menerima "Bye" dari
     * server. setelah diterima maka break.
     */
    String responseLine;
    try {
      while ((responseLine = is.readLine()) != null) {
        System.out.println(responseLine);
        if (responseLine.indexOf("*** Bye") != -1)
          break;
      }
      closed = true;
    } catch (IOException e) {
      System.err.println("IOException:  " + e);
    }
  }
}

Pertama, running program MultiThreadChatServer.java, kemudian akan muncul tampilan seperti ini.

Jika ingin lebih jelasnya, silahkan download filenya dibawah ini: