Académique Documents
Professionnel Documents
Culture Documents
X3-SOLUTION
[http://hendrosteven.wordpress.com | X3-Solution
Lisensi Dokumen:
Copyright 2011 Hendro Steven Tampake, S.Kom Seluruh dokumen ini dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan pendidikan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari Penulis..
Java adalah bahasa pemogramman yang revolusioner dan sangat populer saat ini. Banyak hal hal yang dapat dengan mudah kita buat dengan Java. Salah satunya adalah pemogramman jaringan menggunakan Java Socket. Dalam tulisan ini penulis mencoba membuat aplikasi email sederhana yang dapat digunakan dalam sebuah jaringan komputer (LAN). Ide utama dari program ini adalah sama dengan membuat aplikasi chating menggunakan Java Socket yang banyak terdapat di internet. Perbedaannya adalah pesan yang diterima berupa object yang akan tersimpan secara permanen dalam bentuk file, sehingga kita dapat membacanya kapanpun (seperti email). Dalam tulisan ini penulis hanya akan membahas bagian bagian penting dari aplikasi ini, tetapi penulis juga menyertakan source code lengkap yang dapat didownload.
Persiapan
Untuk mencoba aplikasi ini tentunya komputer kita harus memiliki Java Runtime Environments (JRE) atau apabila kita ingin mengedit source codenya dan mengkompilasi ulang, maka kita harus menginstal Java Development Kit (JDK) yang bisa didownload dari http://java.sun.com (Penulis menggunakan j2sdk1.4.2)
1.
Mail.java
import java.io.Serializable; public class Mail implements Serializable { private String tgl=""; private String pengirim=""; private String senderIP=""; private String subject=""; private String tujuan=""; private String msg=""; public Mail(){} public Mail(String tgl,String senderIP,String pengirim, String subject, String tujuan, String msg) { this.tgl = tgl; this.pengirim = pengirim; this.senderIP = senderIP; this.subject = subject; this.tujuan = tujuan; this.msg = msg; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getPengirim() { return pengirim; } public void setPengirim(String pengirim) { this.pengirim = pengirim; } public String getSenderIP() { return senderIP; } public void setSenderIP(String senderIP) { this.senderIP = senderIP; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getTgl() { return tgl; } public void setTgl(String tgl) { this.tgl = tgl; } }
File ini berfungsi sebagai object mail. Semua pesan yang akan dikirim dan dibaca harus berbentuk object mail ini. Class ini harus Serializable karena object yang bisa dikirimkan via socket adalah object yang
serializable.
2.
MailServer.java
import import import import import import java.io.DataInputStream; java.io.FileOutputStream; java.io.IOException; java.io.ObjectInputStream; java.io.ObjectOutputStream; java.net.Socket;
public class MailServer extends Thread{ private Mail receiveMail; private Socket serviceSocket = null; private DataInputStream in; private FileOutputStream fileMail; private ObjectInputStream oin; private ObjectOutputStream oout; private FileName fn = new FileName();
public MailServer(Socket socket) { this.serviceSocket = socket; } public void run() { try{ in = new DataInputStream(serviceSocket.getInputStream()); oin = new ObjectInputStream(in); fileMail = new FileOutputStream(fn.getFileName()); oout = new ObjectOutputStream(fileMail); try { receiveMail = (Mail)oin.readObject(); oout.writeObject(receiveMail); } catch (ClassNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } fileMail.close(); in.close(); oin.close(); oout.close(); fileMail.close(); serviceSocket.close(); } catch(IOException e){ e.printStackTrace(); }catch(NullPointerException e){ System.out.println("Please read that email..."); } } }
File inilah yang berfungsi sebagai Mail Server atau penerima pesan. Begitu ada object pesan yang diterima, maka file atau class ini akan menyimpannya dalam bentuk file. File yang diciptakan tidak dapat kita baca misalnya dengan notepad, karena file ini berisi object mail dan bukan plain text. Untuk membaca file ini harus menggunakan class yang berperan sebagai mail reader yang akan saya jelakan nanti. Lokasi dan nama file diciptakan oleh baris perintah berikut ini : fileMail = new FileOutputStream(fn.getFileName()); fn adalah Object FileName, atau object pembantu untuk menciptakan String nama file dan tanggal saat ini (bisa dilihat pada source code yang disertakan). Nama file yang diciptakan adalah berdasarkan waktu kapan pesan itu diterima.
3.
MultiMailServer.java
import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class MultiMailServer { static final int PORT = 777; public ServerSocket mms; public MultiMailServer(){ try { mms = new ServerSocket(PORT); System.out.println("Mail Server Started..."); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void startMultiMailServer() throws IOException { try{ while(true){ Socket socket = mms.accept(); MailServer ms=new MailServer(socket); ms.start(); System.out.println("You have a New Message..."); } }finally{ mms.close(); } } public static void main(String args[]) throws IOException{ MultiMailServer ms = new MultiMailServer(); try { ms.startMultiMailServer(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
File ini berfungsi menjalankan Mail server secara multi thread agar dapat diakses oleh banyak Mail client. File atau class ini akan menjalankan Thread Mail server yang baru begitu ada pesan yang masuk. 4. PostMail.java File ini berbentuk java swing dan source codenya cukup panjang, sehingga penulis hanya akan menampilakan penggalan kode yang penting. File ini juga merupakan bagian utama dari program kita, berperan sebagai user interface yaitu tempat menulis pesan (Mail client) dan membaca pesan (Mail Reader). Penggalan kode berikut ini yang berfungsi menciptakan object mail dan mengirimnya ke Server mail tujuan.
protected void jButton1ActionPerformed(ActionEvent evt){ //TODO add your handler code here FileName fn = new FileName(); pengirim = jTextField1.getText(); subject = jTextField2.getText(); tujuan = jTextField3.getText(); pesan = jTextArea1.getText(); Mail email = new Mail(fn.getCurrDate(),pengirimIP,pengirim,subject,tujuan,pesan); MailClient mc; try { mc = new MailClient(tujuan); mc.sendMail(email); JOptionPane.showMessageDialog(null,"Message Send..."); jTextField1.setText(""); jTextField2.setText(""); jTextField3.setText(""); jTextArea1.setText(""); }catch(ConnectException e){ JOptionPane.showMessageDialog(null,"Destination Server is Offline..."); }catch (java.net.UnknownHostException e) { // TODO Auto-generated catch block JOptionPane.showMessageDialog(null,"Unknown Destination Server..."); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
Dan berikut ini adalah penggalan kode yang berfungsi sebagai pembaca pesan atau Mail Reader.
protected void jList1MouseClicked(MouseEvent evt){ //TODO add your handler code here int indexData = jList1.getSelectedIndex(); Mail readMail = new Mail(); readMail = (Mail)inbox.get(indexData); String tgl = "Tanggal : "+readMail.getTgl()+"\n"; String pengirim = "Pengirim : "+readMail.getPengirim()+ " on " + readMail.getSenderIP()+"\n"; String subject = "Subject : "+readMail.getSubject()+"\n"; String pesan = "Pesan :\n"+readMail.getMsg()+"\n"; jTextArea2.setText(tgl+pengirim+subject+pesan); }
Di dalam Folder src terdapat kode program secara lengkap dan di dalam folder bin terdapat file file class hasil kompilasi. Di dalam folder bin juga terdapat sebuah batch file (run.bat). File ini berfungsi untuk menjalankan Mail Server dan Mail Client secara bersamaan Isi dari file run.bat ini cukup sederhana dan bisa dibuka dengan notepad yaitu
Mail Client
Sebagai percobaan kita akan mengirimkan pesan ke Mail Server kita sendiri atau alamat komputer kita sendiri.
Pesan Pertama untuk Percobaan Saat kita tekan tombol Send maka pesan kita akan terkirim dan akan diterima oleh Server Mail.
Mail Server Menerima sebuah Pesan Mail Server akan menyimpan pesan tersebut dalam bentuk file pada folder bin/MailBank/[namafile].mail. Nama file berdasarkan kapan pesan tersebut diterima. Untuk membaca File tersebut pindahlah ke tab inbox. Tekan tombol Refresh Inbox untuk mengupdate isi inbox.
Inbox Pilihlah pesan yang ada pada inbox, maka akan ditampilakan pesan detail pada teks area di sampingnya.
Pesan ditampilakan Cobalah untuk menjalankan aplikasi mail ini pada 2 komputer yang berbeda tapi terhubung dalam jaringan, kemudian cobalah untuk saling mengirim pesan. Apabila anda menutup program Mail Client, anda akan tetap dapat menerima pesan selama Mail Servernya tetap berjalan. Selamat mencoba semoga bermanfaat..... NB: Aplikasi ini hanya untuk latihan Java Socket jadi belum begitu sempurna, jika masih terdapat ERROR silahkan diperbaiki sendiri OK.