Jurnal Komputasi, Volume 07 No: 1 Juni 2008 ISSN : 1412-9434
Pengembangan Aplikasi Pertukaran Pesan Berbasis Teks Melalui Jaringan Lokal (LAN) Menggunakan Microsoft Visual C++ 6.0 Diny Wahyuni1, Susetyo Hadi2
[email protected],
[email protected] 1,2 Universitas Gunadarma Jl. Margonda Raya No. 100 Pondok Cina Depok 16424 ABSTRAK Komunikasi merupakan hal penting dalam kehidupan manusia, terlebih lagi pada era globalisasi sekarang komunikasi memegang peranan handal dalam banyak hal sebagai sarana penghubung manusia dengan manusia yang lain. Dalam suatu jaringan komputer pun terjadi sebuah proses komunikasi antar entity atau perangkat yang berlainan sistemnya. Yang dimaksud Entity atau perangkat ini adalah segala sesuatu yang mampu menerima dan mengirim. Untuk berkomunikasi mengirim dan menerima antara dua entity dibutuhkan pengertian di antara kedua belah pihak. Pengertian ini lah yang dikatakan sebagai protokol. Protokol adalah himpunan aturan-aturan main yang mengatur komunikasi data. Protokol mendefinisikan apa yang dikomunikasikan, bagaimana dan kapan terjadinya komunikasi. Elemen-elemen penting daripada protokol adalah syntax, semantics dan timing. Untuk itu di rancanglah suatu alat bantu yang diimplementasikan kedalam suatu program aplikasi Microsooft Visual C++ 6.0, di mana program tersebut dapat membantu para pengguna komputer di dalam sebuah jaringan yang terkoneksi atau badan-badan hukum dalam pekerjaan sehingga dapat menghemat waktu, uang, dan tenaga. Kata kunci : Pengiriman Pesan, Chatting, Microsoft Visual C++
PENDAHULUAN Chat adalah Pertukaran pesan secara online antara dua atau lebih pengguna komputer yang terhubung lewat jaringan [oxforddictionaries.com]. Chatting merupakan bentuk komunikasi yang paling digemari. Pada sebuah jaringan lokal atau Local Area Network (LAN) sudah terdapat fasilitas untuk berkomunikasi dengan menggunakan text, tetapi aplikasi tersebut sulit dimengerti dan tidak efisien untuk digunakan atau tidak praktis. Untuk itu dirancanglah sebuah aplikasi pertukaran pesan yang berbasis text yang mudah di mengerti dan mudah dipergunakan sebagai sarana dalam bertukar informasi melalui jaringan kerja lokal atau LAN (Local Area Network). Sebagai gambaran dari program yang akan diajukan, diambil sebuah jaringan kerja terhubung, antara komputer dengan komputer yang lain dengan sebuah sever sebagai pengendali dari keseluruhan komputer yang terhubung. Sistem jaringan koneksinya berbentuk jaringan protocol connection oriented. Pada jaringan ini setiap pengguna dapat berkiriman pesan dengan menggunakan aplikasi asalkan terkoneksi ke server. Rancangan Struktur Aplikasi Pada aplikasi server sebelum masuk ke dalam ruang chatserver aplikasi akan memanggil port setting yang berfungsi untuk menentukan nilai port yang akan digunakan sebagai
1
Jurnal Komputasi, Volume 07 No: 1 Juni 2008 ISSN : 1412-9434 jalur transfer data setelah itu frame akan memanggil frame ChatServer untuk masuk ke dalam chatroom untuk server.
Gambar 1. Rancangan Struktur Aplikasi Server
Aplikasi untuk client merupakan aplikasi yang berfungsi sebagai komunikasi antara client dengan aplikasi server sebagai perantara.
Gambar 2. Rancangan Struktur Aplikasi Client
Aplikasi server merupakan aplikasi yang pertama harus dijalankan karena akan menjalankan frame port setting yang berfungsi untuk mengatur jalur data yang akan digunakan untuk transfer data. Setelah jalur data ditentukan maka frame port setting akan memanggil frame chartserver yang akan berfungsi untuk menghubungkan client dengan client yang terkoneksi ke server untuk melakukan komunikasi dan mendeteksi berapa banyak client yang terkoneksi ke server.
Gambar 3. Keterhubungan Struktur Aplikasi Client dan Server
Untuk terkoneksi ke server aplikasi client akan memanggil frame logon parameter yang berfungsi untuk menuliskan nickname yang merupakan identitas satu-satunya dari client yang terkoneksi ke server maka setelah terkoneksi maka client dapat berkomunikasi dengan
70
Jurnal Komputasi, Volume 07 No: 1 Juni 2008 ISSN : 1412-9434 client yang lain dengan syarat terhubung ke server. Gambaran Aplikasi Server Pada
aplikasi server setelah aplikasi dijalankan aplikasi akan mengeksekusi frame port seting yang merupakan tampilan awal untuk mengeksekusi frame selanjutnya seperti yang terlihat pada flowchart gambar 4.
Gambar 4. Flowchart Program Server
Frame Port Setting merupakan frame yang berfungsi untuk mengatur jalur data yang akan digunakan untuk transfer data antar client dengan server. Setelah frame ini di tampilkan maka akan muncul frame ChatServer. Frame ChatServer berfungsi untuk menghubungkan client dengan client yang terkoneksi ke server untuk melakukan komunikasi dan mendeteksi berapa banyak client yang terkoneksi ke server. a. Rancangan Frame Port Setting fungsi inti dari frame port setting adalah pembuka jalan yang digunakan aplikasi untuk transfer data melalui port yang terdeklarasi di dalam editbox yang merupakan inti dari aplikasi server
Gambar 5. Rancangan Frame Port Setting
71
Jurnal Komputasi, Volume 07 No: 1 Juni 2008 ISSN : 1412-9434
Gambar 6. Flowchart Frame Port Setting
b. Rancangan Frame ChatServer Untuk merancang sebuah ruangan (room) yang digunakan untuk komunikasi antarclient digunakan frame ChatServer yang di dalamnya terdapat editbox yang berfungsi untuk menerima semua permintaan dari client ke server.
Gambar 7. Rancangan Frame ChatServer
72
Jurnal Komputasi, Volume 07 No: 1 Juni 2008 ISSN : 1412-9434
Gambar 8. Flowchart Frame ChatServer
Gambaran Aplikasi Client Pada aplikasi client setelah aplikasi dijalankan aplikasi akan mengeksekusi frame ChatClient yang merupakan tampilan awal untuk melakukan koneksi terhadap server.
Gambar 9. Flowchart Program Client
73
Jurnal Komputasi, Volume 07 No: 1 Juni 2008 ISSN : 1412-9434 a. Rancangan Frame ChatClient Pada frame ChatClient digunakan dua buah editbox yang digunakan untuk melakukan komunikasi berbasis teks antar client maupun dengan server dan sebuah listbox yang digunakan untuk mengetahui siapa saja yang sedang terkoneksi ke server.
Gambar 10. Rancangan Frame ChatClient
Gambar 11. Flowchart Frame ChatClient
b. Rancangan Frame Help
Gambar 12. Rancangan Frame Help
Pembuatan Aplikasi Aplikasi chatting yang dibuat ini merupakan aplikasi yang melakukan koneksi dengan
74
Jurnal Komputasi, Volume 07 No: 1 Juni 2008 ISSN : 1412-9434 winsock yang mengikat socket dari protocol yang dikenalinya dan disesuaikan dengan bind API call, lalu meletakkan socket dalam modus listening yang dilakukan dengan fungsi API listen dengan port-port yang telah ditentukan. Disini digunakan dua aplikasi yang berkerja bersama yang merupakan satu kesatuan yaitu aplikasi untuk server dan aplikasi untuk client (pengguna). a. Pembuatan Aplikasi Server Pada aplikasi server diperlukan class-classyang dapat mengkoneksikan antara classclass yang berada di server dan class yang berada di client dengan menggunakan class CSocket yaitu class yang mengatur pertukaran data dengan menghubungkan port-port yang di gunakan oleh aplikasi ini. Pembuatan Proses Koneksi: BOOL CChatServerDoc::OnNewDocument() { if (!COleServerDoc::OnNewDocument()) return FALSE; this->SetTitle("Server");// Menampilkan kata “Server” di pojok kiri atas frame CPortDlg Dialog; if (Dialog.DoModal() == IDOK) //Dialog Box tampil Dan tombol OK aktif { m_pSocket = new CListeningSocket(this); if (m_pSocket->Create(Dialog.m_nPort+1500)) // 700 { if (m_pSocket->Listen())// menjalankan listen return TRUE; } } return FALSE; return TRUE; }
Setelah itu aplikasi server memeriksa apakah koneksi telah kosong dan menghapus semua client yang terkoneksi. Setelah semua syarat di atas terpenuhi aplikasi server akan merakit kembali socket untuk komunikasi lebih lanjut. Sedangkan untuk menahan semua socket yang terbuka untuk terkoneksi ke server aplikasi menjalankan perintah IsAborted(). Sealin itu untuk menjaga agar socket tetap terbuka tapi tidak bisa mengirim atau menerima data baik dari client atau ke client maka aplikasi menjalankan fungsi ShutDown(), terlihat pada source code berikut: void CChatServerDoc::DeleteContents() { if(m_pSocket == (CListeningSocket*)NULL) return; delete m_pSocket; m_pSocket = NULL; CString temp; if (temp.LoadString(IDS_SERVERSHUTDOWN)) m_msgList.AddTail(temp); while(!m_connectionList.IsEmpty()) { CClientSocket*pSocket=(CClientSocket*)m_connectionList.RemoveHead (); CMsg* pMsg = AssembleMsg(pSocket); pMsg->m_bClose = TRUE; SendMsg(pSocket, pMsg); if (!pSocket->IsAborted()) { pSocket->ShutDown();
Pada saat client terkoneksi ke server dan melakukan komunikasi antarclient maka posisi server akan memeriksa apakah port dari client yang di gunakan untuk koneksi sama dengan port server yang di gunakan untuk tranfer data lalu memeriksa apakah sudah ada yang melakukan koneksi jika sudah maka aplikasi akan memberikan tempat tepat di bawah client yang terkoneksi terdahulu. Jadi posisi client yang terkoneksipun berurutan dari 75
Jurnal Komputasi, Volume 07 No: 1 Juni 2008 ISSN : 1412-9434 yang pertama terkoneksi hingga client yang terakhir terhubung ke server void CChatServerDoc::UpdateClients() { for(POSITION pos = m_connectionList.GetHeadPosition(); pos != NULL;) { CClientSocket*pSocket=(CClientSocket*)m_connectionList.GetNext(pos); CMsg* pMsg = AssembleMsg(pSocket); if (pMsg != NULL) SendMsg(pSocket, pMsg); } }
perintah untuk membaca pesan dari client dilakukan oleh perintah ReadMsg yang dapat menerima data yang ditranfer dari client dengan perintah ReceivedMsg pesan diupdate dan diperbaharui oleh perintah AssembleMsg(), setelah server membaca pesan dari client maka server akan memeriksa dan mengupdate daftar dari client yang terkoneksi dan memeriksa pesan yang telah terkirim. CMsg* CChatServerDoc::ReadMsg(CClientSocket* pSocket) { static CMsg msg; TRY { pSocket->ReceiveMsg(&msg); if(msg.code == SENDING_NICKNAME) { UpdateChattersList(msg.m_strText); } if(msg.code == LEAVING_CHAT) { DeleteChatter(msg.m_strText, &msg); } if(msg.code == NORMAL_MESSAGE) { Message(msg.m_strText); m_msgList.AddTail(msg.m_strText); } }
Untuk UpdateConection maka frame window akan mengambil pesan dari variable m_connectionList sehingga semua pesan dapat ditampilkan dalam list box di dalam frame window. void CChatServerDoc::UpdateConnections() { CMainFrame* cwnd = (CMainFrame*)AfxGetMainWnd(); cwnd->m_ConnectionCount = m_connectionList.GetCount(); }
Aplikasi server dapat menghapus semua client yang sedang terhubung dengan server dengan mengosongkan semua posisi client dari daftar dari atas ke bawah tapi bila client yang terhubung tidak kosong maka aplikasi server akan menghapus semua nama client dari daftar list. void CChatServerDoc::DeleteChatter(CString sNickName, CMsg* pMsg) { for(POSITION pos=GetFirstViewPosition();pos!=NULL;) { CView* pView = GetNextView(pos); CLeftView* pChatView = DYNAMIC_DOWNCAST(CLeftView, pView); if (pChatView != NULL) pChatView->DeleteChatter(sNickName); int i; for(i = 0 ; i < pMsg->m_chattersList.GetCount(); i++) { pos = pMsg->m_chattersList.FindIndex(i); CString sName = pMsg->m_chattersList.GetAt(pos); if(sName == sNickName) { pMsg->m_chattersList.RemoveAt(pos); pMsg->code = SENDING_CHATTERS_LIST; SendUpdatedList(pMsg); break; } } }
76
Jurnal Komputasi, Volume 07 No: 1 Juni 2008 ISSN : 1412-9434 b. Pembuatan Aplikasi Client Pada aplikasi client class ChatClientDoc merupakan class pertama yang akan menjalankan OnNewDocument() yang memanggil dockument baru dengan membuat dan memeriksa apakah client terhubung dengan server tidak ada koneksi dengan server karena baru pertama kali dijalankan, setelah itu mengkosongkan socket, file, keluaran, dan masukan dari file. CChatClientDoc::CChatClientDoc() { // TODO: add one-time construction code here bIsConnected = FALSE; m_pSocket = NULL; m_pFile = NULL; m_pArchiveOut = NULL; m_pArchiveIn = NULL; }
Kemudian aplikasi akan berusaha untuk menghubungi server dengan menyocokkan IP server yang terdapat pada frame port setting server dengan IP yang terdapat di frame Logon Parameter, jika sama maka aplikasi akan memanggil class CChatSocket() yang berfungsi untuk membuat sambungan socket dengan server pada port yang telah ditentukan BOOL CChatClientDoc::ConnectSocket(LPCTSTR lpszAddress, UINT nPort) { m_strHandle = lpszHandle; m_pSocket = new CChatSocket(this);
lpszHandle,
LPCTSTR
Setelah socket terbentuk maka aplikasi akan melakukan koneksi ke server melalui port yang telah ditentukan, lalu emeriksa apakah koneksi berhasil kalau tidak maka aplikasi akan menghapus socket dan mengkosongkan isi socket dan menampilkan pesan kesalahan. if (!m_pSocket->Create()) { delete m_pSocket; m_pSocket = NULL; AfxMessageBox(IDS_CREATEFAILED); return FALSE; } while (!m_pSocket->Connect(lpszAddress, nPort + 1500)) // 700 { if (AfxMessageBox(IDS_RETRYCONNECT,MB_YESNO) == IDNO) { delete m_pSocket; m_pSocket = NULL; return FALSE; }
Jika koneksi berhasil maka aplikasi akan memanggil class CSocketFile yang berfungsi untuk membuat sambungan baru untuk tranfer data, mengirim pesan, mengirim Nickname, dan merubah IDS_CONNECT. Seperti yang terlihat pada source code di bawah ini. m_pFile = new CSocketFile(m_pSocket); m_pArchiveIn = new CArchive(m_pFile,CArchive::load); m_pArchiveOut = new CArchive(m_pFile,CArchive::store); SendMsg(m_strHandle, SENDING_NICKNAME, false); CString strTemp; if (strTemp.LoadString(IDS_CONNECT)) SendMsg(strTemp, NORMAL_MESSAGE, true); return TRUE;
Pada dasarnya aplikasi client sama saja dengan aplikasi server akan tetapi pada aplikasi server terdapat fasilitas untuk listen yang tidak terdapat pada aplikasi client namun pada aplikasi client terdapat proses pending yang di gunakan untuk menerima masukan yang fungsinya hampir sama dengan Listen. Pada aplikasi client terdapat fungsi DeleteContents() untuk menghapus semua sambungan yang terdapat pada aplikasi client. Pertama-tama fungsi tersebut memeriksa apakah socket, file, output tidak kosong , jika terpenuhi maka aplikasi memanggil class CMsg untuk menghapus koneksi dan kemudian menampilkan kalimat yang berada di dalam IDS_DISCONNECT lalu mengirimkan pesan ke server bahwa client telah meninggalkan
77
Jurnal Komputasi, Volume 07 No: 1 Juni 2008 ISSN : 1412-9434 ruang chating lalu menutup socket dan menghapus semua koneksi yang masuk dan keluar aplikasi client. void CChatClientDoc::DeleteContents() { if ((m_pSocket !=NULL)&&(m_pFile!=NULL)&&(m_pArchiveOut!= NULL)) { CMsg msg; CString strTemp; if (strTemp.LoadString(IDS_DISCONNECT)) { SendMsg(m_strHandle, LEAVING_CHAT, false); msg.code = NORMAL_MESSAGE; msg.m_bClose = TRUE; msg.m_strText = m_strHandle + strTemp; msg.Serialize(*m_pArchiveOut); m_pArchiveOut->Flush(); } }
Setelah semua koneksi terputus maka aplikasi client akan mengkosongkan semua koneksi yang keluar lalu menghapus semua koneksi yang terdapat di dalam aplikasi client, setelah itu aplikasi client memanggil fungsi shutdown yang berfungsi menahan semua socket yang terbuka untuk terkoneksi ke server dan membuat socket tetap terbuka tapi tidak bisa mengirim atau menerima data baik dari client atau ke client. delete m_pArchiveOut; m_pArchiveOut = NULL; delete m_pArchiveIn; m_pArchiveIn = NULL; delete m_pFile; m_pFile = NULL; if (m_pSocket != NULL) { BYTE Buffer[50]; m_pSocket->ShutDown(); while(m_pSocket->Receive(Buffer,50) > 0); } delete m_pSocket; m_pSocket = NULL; for(POSITION pos=GetFirstViewPosition();pos!=NULL;) { CView* pView = GetNextView(pos); if(pView->IsKindOf(RUNTIME_CLASS (CMessageView))) { CMessageView* pChatView = (CMessageView*)pView; pChatView->GetEditCtrl().SetWindowText(_T("")); } } CDocument::DeleteContents(); }
Kesimpulan dan Saran Aplikasi ini sangat membantu dan memudahkan client dalam berkomunikasi ke server maupun ke client yang bersangkutan serta melakukan komunikasi antar client ke client yang terhubung ke server yang menghemat waktu dan efisien. aplikasi ini hanya dapat mengirimkan informasi dalam bentuk teks, dan masih dalam lingkup yang kecil, selain itu tampilan aplikasi yang dibuat belum menarik dan aplikasi client tergantung terhadap aplikasi server yang harus terus terkoneksi sehingga diharapkan pengembangan aplikasi ke depannya akan dapat menampilkan informasi tidak hanya berbentuk teks namun dapat berbentuk gambar dan atau suara serta lingkup jaringan juga dapat digunakan dalam lingkup jaringan peer to peer sehingga dapat diperoleh aplikasi yang lebih optimal. Referensi Abdul Kadir, Pemrograman C++, Penerbit ANDI, Yogyakarta, Edisi I Cetakan ke III, 2001 78
Jurnal Komputasi, Volume 07 No: 1 Juni 2008 ISSN : 1412-9434 Agus Kurniawan, Pemrograman Jaringan Internet Dengan Visual C++, PT Elex Media Komputindo Kelompok Gramedia, Jakarta, 2002 Gregory Kate, Using Visual C++, QUE, United State Of America, Special Edition, 1997 Jaka Fahrial, Teknik Konfigurasi LAN, IlmuKomputer.Com,Indonesia, 2003 Viktor Toth, Visual C++ 5, SAMS Publishing, United State Of America, 1997 http://www.oxforddictionary.com
79