Aplikasi chatting sudah mulai banyak
dibuat semenjak teknologi internet mulai ada. Dahulu masih terdapat beberapa
aplikasi chatting sederhana seperti MIRC dan sekarang kita sudah melihat banyak
sekali aplikasi yang digunakan untuk media komunikasi berbasis teks ini dan
semakin menarik baik dari segi tampilan maupun performa, salah satu contohnya
yaitu yahoo messenger.
Pada postingan kali ini, akan coba
dibuat sebuah aplikasi chatting berbasis teks sederhana yang menggunakan
protocol UDP sebagai protocol pengiriman datanya. Aplikasi ini dibuat berbasis
bahasa pemrograman C# menggunakan visual studio C# 2010.
Ada beberapa bagian dari program yang
dianggap memiliki peranan utama pada aplikasi chatting ini yang akan dibahas
secara singkat tentang fungsi dan kegunaan dan pengaruhnya terhadap aplikasi
secara utuh. Bagian program tersebut adalah sebagai berikut :
using System.Net;
using System.Net.Sockets;
using System.Threading;
bagian program diatas merupakan bagian
program yang memanggil library yang akan dipakai sebagai jalur untuk mengakses
beberapa fungsi yang diperlukan seperti penggunaan thread, akses port dan
socket dan masih banyak lagi.
delegate void AddMessage(string
message);
pendeklarasian fungsi AddMessage yang
bertipe delegate void, delegate disini digunakan karena adanya pengaksesan sebuah
tool (richTextBox) pada 2 buah event yang berbeda.
int port = 11000;
const string broadcastAddress
= "192.168.0.255";
bagian program diatas digunakan untuk
mendeklarasikan dan mendefinisikan variabel “port” yang mana nantinya nilai variabel
ini digunakan sebagai port yang akan digunakan aplikasi untuk mengirimkan dan
menerima data. Selain variabel “port”, dideklarasikan serta didefinisikan juga
variabel “broadcastAddress” yang mana nantinya variabel ini digunakan untuk
mendefinisikan alamat IP tujuan, dari client aplikasi chatting teks ini. Karena
nilai pada variabel tersebut adalah IP broadcast, maka nantinya pesan teks yang
dikirim akan dikirimkan ke alamat broadcast sehingga setiap client yang
terhubung pada satu jaringan akan menerima pesan yang sama. Nilai variabel port
dan broadcastAddress ini bisa dirubah sesuai dengan keinginan, atau juga bisa
menggunakan nilai inputan dari sebuah textbox pada aplikasi.
UdpClient receivingClient = new UdpClient(11000);
UdpClient sendingClient;
Bagian program diatas mendeklarasikan
variabel receivingClient dan sendingClient. Pada saat pendeklarasian digunakan
tipe UdpClient yang mana tipe ini merupakan hasil akses terhadap library yang
telah dijelaskan sebelumnya. Dengan adanya pendeklarasian dengan menggunakan
UdpClient ini, menjelaskan bahwa protocol yang digunakan saat pentrasferan data
adalah protocol UDP.
Thread receivingThread;
Bagian program ini merupakan pendeklarasian
terhadap thread yang akan dibuat dan yang akan digunakan nantinya.
private void
InitializeSender()
{
sendingClient = new
UdpClient(broadcastAddress, port);
sendingClient.EnableBroadcast = true;
}
Fungsi diatas merupakan sebuah fungsi
yang digunakan untuk inisialisasi terhadap tujuan pengiriman data serta
pengaktifan pengiriman secara broadcast yang mana pengirimannya ditujukan
kealamat broadcast.
private void
InitializeReceiver()
{
ThreadStart
start = new ThreadStart(Receiver);
receivingThread = new
Thread(start);
receivingThread.IsBackground = true;
receivingThread.Start();
}
Fungsi diatas digunakan untuk
inisialisasi saat aplikasi menerima data dari client/user yang lain. Pada saat
fungsi ini dipanggil, maka aka nada pendeklarasian dan inisialisasi terhadap
thread yang akan digunakan dan dimanfaatkan untuk menangani data yang masuk
yang kemudian akan diolah. Pada saat pengaktifan thread, langsung didefinisikan
thread tersebut akan menjalankan fungsi Receiver. Jadi secara otomatis saat ada
data masuk ke buffer penerima maka langsung akan ditangani oleh fungsi
Receiver.
private void
btnSend_Click(object sender, EventArgs e)
{
tbSend.Text = tbSend.Text.TrimEnd();
if (!string.IsNullOrEmpty(tbSend.Text))
{
string
toSend = "<" + Environment.MachineName + ">
: " + tbSend.Text;
byte[]
data = Encoding.ASCII.GetBytes(toSend);
sendingClient.Send(data, data.Length);
tbSend.Text = "";
}
tbSend.Focus();
}
Fungsi diatas merupakan event dari
button yang bernama “btnSend”. Program yang ada pada fungsi ini akan dijalankan
jika button “btnSend” ditekan. Program pada fungsi ini berfungsi untuk
mengirimkan data yang telah diketikkan pada sebuah textbox yang bernama “tbSend”.
Sebelum data dikirimkan, textbox “tbSend” akan dicek terlebih dahulu apakah textbox
tersebut kosong atau tidak. Jika tidak kosong, maka dimulailah proses
pengiriman data yang ada pada textbox tersebut. Proses pengiriman diawali
dengan pengisian data ke variabel bertipe string yang bernama “toSend”, yang
mana nilai pada variabel ini terdiri dari nama PC yang digunakan untuk menjalankan
aplikasi dan isi dari textbox “tbSend”. Setelah itu, data vari variabel “toSend”
dirubah kedalam bentuk byte dan dimasukkan ke variabel “data”. Jadi pesan yang
akan dikirimkan merupakan isi dari variabel “data”.
private void
Receiver() {
IPEndPoint endPoint = new
IPEndPoint(IPAddress.Any,
port);
AddMessage
messageDelegate = MessageReceived;
while (true)
{
byte[]
data = receivingClient.Receive(ref endPoint);
string
message = Encoding.ASCII.GetString(data);
Invoke(messageDelegate, message);
System.Console.Beep(1500, 300);
}
}
Fungsi diatas merupakan fungsi yang
digunakan untuk menangani setiap ada data yang masuk melalui port yang
digunakan sebagai jalur komunikasi. Pada fungsi ini, akan dideklarasikan lagi
IPEndPoint yang digunakan untuk mendefinisikan client/user yang mengirimkan
data. Pada fungsi diatas digunakan tipe “Any” pada IPEndPoint nya, ini
menandakan bahwa aplikasi akan menerima data dari IP manapun yang masuk ke port
yang telah didefinisikan sebelumnya. Data yang masuk akan dirubah dulu kedalam
bentuk byte, baru kemudian dirubah lagi kedalam bentuk string yang akhirnya
pesan yan gsudah dirubah tersebut akan dikirimkan kesebuah fungsi lain untuk
ditampilkan.
private void
MessageReceived(string message)
{
rtbChat.Text += message + "\n";
}
Fungsi diatas merupakan fungsi yang akan
dipanggil setelah fungsi Receiver selesai mengubah data yang masuk ke data
bertipe string. Fungsi ini bertugas untuk menampilkan data bertipe string tadi
kedalam sebuah richTextBox yang bernama “rtbChat”.
Berikut ini merupakan program lengkap
nya :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace PeerToPeerChat
{
public partial class ChatForm : Form
{
delegate void AddMessage(string
message);
string userName;
int port =
11000;
const string broadcastAddress = "192.168.0.255";
UdpClient receivingClient = new UdpClient(11000);
UdpClient
sendingClient;
Thread
receivingThread;
public ChatForm()
{
InitializeComponent();
this.Load += new EventHandler(ChatForm_Load);
btnSend.Click += new EventHandler(btnSend_Click);
}
private void
ChatForm_Load(object sender, EventArgs e)
{
tbSend.Focus();
InitializeSender();
InitializeReceiver();
}
private void
InitializeSender()
{
sendingClient = new
UdpClient(broadcastAddress, port);
sendingClient.EnableBroadcast = true;
}
private void
InitializeReceiver()
{
ThreadStart
start = new ThreadStart(Receiver);
receivingThread = new
Thread(start);
receivingThread.IsBackground = true;
receivingThread.Start();
}
private void
btnSend_Click(object sender, EventArgs e)
{
tbSend.Text = tbSend.Text.TrimEnd();
if (!string.IsNullOrEmpty(tbSend.Text))
{
string
toSend = "<" + Environment.MachineName + ">
: " + tbSend.Text;
byte[]
data = Encoding.ASCII.GetBytes(toSend);
sendingClient.Send(data, data.Length);
tbSend.Text = "";
}
tbSend.Focus();
}
private void
Receiver() {
IPEndPoint endPoint = new
IPEndPoint(IPAddress.Any,
port);
AddMessage
messageDelegate = MessageReceived;
while (true)
{
byte[]
data = receivingClient.Receive(ref endPoint);
string
message = Encoding.ASCII.GetString(data);
Invoke(messageDelegate, message);
System.Console.Beep(1500, 300);
}
}
private void
MessageReceived(string message)
{
rtbChat.Text += message + "\n";
}
}
}
Dibawah ini merupakan desain tampilan
yang dibuat.
0 komentar:
Posting Komentar