JARINGAN


ADA BAIKNYA Anda melihat kembali artikel pada edisi sebelumnya yang merupakan dasar persiapan pembuatan SMS gateway.

Pada edisi sebelumnya, kita telah membahas mengenai AT Command yang merupakan inti dari pemrograman SMS gateway dengan menggunakan GSM modem/ponsel.

Karena itu, Anda harus terlebih dahulu memahami AT Command. Anda dapat mencobanya secara langsung tanpa pemrograman melalui HyperTerminal yang disediakan Win-

dows.

Kita juga telah membahas dua format SMS yang digunakan device GSM modem/ponsel, yaitu format PDU dan format Text. Kebanyakan device telah mendukung format text yang lebih mudah dan user friendly, tetapi jika device Anda tidak mendukung format text, Anda harus menggunakan format PDU yang lebih rumit.

Database

Apa kelebihan sebuah SMS gateway dibandingkan dengan pengiriman ataupun penerimaan dengan ponsel biasa? Kelebihan yang paling nyata tentunya adalah SMS gateway merupakan aplikasi komputer, artinya dapat melakukan otomatisasi dan meringankan pekerjaan manual.

Selain itu, suatu aplikasi juga dapat menyimpan data dalam jumlah yang banyak. Berapa SMS yang dapat ditampung oleh inbox dan sent item pada ponsel Anda? Tentunya tidak sebanyak data yang dapat disimpan pada harddisk komputer.

Umumnya, sebuah SMS gateway akan memindahkan data SMS pada device ke dalam sebuah database agar dapat di-proses lebih lanjut, sehingga device GSM modem/ponsel hanya bersifat sebagai media pengirim dan penerima SMS.

Karena itu sebuah aplikasi SMS gateway juga memerlukan database, table-table utama yang perlu dipersiapkan pada sebuah SMS gateway adalah sebagai berikut:

1. Inbox.

Merupakan table yang berfungsi untuk menampung SMS yang diterima. Field-field penting yang diperlukan antara lain field pengirim (berisi nomor pengirim), pesan (berisi text SMS), dan waktu (berisi tanggal dan jam).

Jika Anda hanya menggunakan satu device, Anda tidak memerlukan field nomor penerima, karena semua SMS yang masuk inbox tentunya ditujukan untuk sebuah nomor saja, yaitu nomor GSM yang terpasang pada device Anda.

2. Outbox.

Table Outbox merupakan table yang menyimpan SMS yang akan dikirimkan. Field-field yang penting adalah field tujuan (nomor penerima SMS), dan pesan (berisi text SMS).

3. Sent Item.

Saat SMS pada Outbox telah terkirim, maka data tersebut akan masuk kedalam table Sent Item. Jadi table Sent Item adalah table yang menyimpan SMS yang telah terkirim.

Karena itu pada intinya isi dari Sent Item adalah record yang tadinya terdapat pada table Outbox, ditambah dengan field-field seperti waktu (berisi tanggal dan jam), serta status delivery yang menunjukkan indikasi apakah sebuah SMS telah diterima atau tidak.

Inisialisasi

Pada edisi yang lalu, Anda telah mencoba menjalankan AT command melalui HyperTerminal. AT command diketikkan pada HyperTerminal dan Anda dapat langsung melihat hasilnya ataupun response yang diterima oleh device pada tampilan HyperTerminal.

Aplikasi SMS gateway memindahkan proses tersebut ke dalam bahasa pemrograman. Dalam artikel ini, kita akan menggunakan bahasa pemrograman Visual Basic untuk membuat SMS gateway. Kita juga akan menggunakan AT command yang kompatibel dengan jenis GSM modem Itegno 3000.

Sebagai catatan tambahan, AT command bisa saja berbeda-beda antara device satu dengan device lainnya. Ada baiknya Anda memiliki dokumentasi AT command yang didukung oleh device yang Anda gunakan.

Pada Visual Basic, Anda dapat menggunakan control MSComm, yang berfungsi seperti layaknya HyperTerminal. MSComm berfungsi sebagai media komunikasi program Anda dengan device, tentunya sebelum dapat “bercakap-cakap” dengan device, Anda perlu melakukan inisialisasi device terlebih dahulu.

Proses inisialisasi berarti Anda harus menentukan terlebih dahulu port dan baud rate, parity, dan konfigurasi lain yang digunakan oleh device Anda. Di dalam bahasa Visual Basic, kurang lebih kode programnya akan seperti di bawah ini:

MSComm1.CommPort = 3

MSComm1.Settings = “115200,N,8,1”

MSComm1..PortOpen = True

Kode program di atas memberikan nilai pada property-property MSComm untuk melakukan inisialisasi dan mengaktifkan port, asumsi kode program di atas adalah device Anda terpasang pada port 3, diatur menggunakan baud rate 115200, parity = N, databit = 8, dan stop bit =1.

Jika pada program HyperTerminal Anda dapat mengetikkan perintah-perintah AT command dan melihat responsenya, demikian juga pada control MSComm, dengan menggunakan property Output dan Input.

Property Output digunakan untuk memberikan command/perintah kepada device, sedangkan property Input menghasilkan data dari buffer penerima.

Jangan menjadi rancu antara output dan input, property Output pada MSComm berarti merupakan transmit data yang dikirimkan pada device, response dari device akan diterima oleh property Input.

Sebagai contoh, jika Anda ingin memberikan perintah AT command sederhana, misalnya AT, maka Anda menuliskannya pada property Output. Jika komunikasi berjalan dengan baik, maka device akan menjawab OK yang diterima oleh property

Input.

Kita akan melanjutkan potongan program di atas, dengan contoh untuk mengirimkan dua perintah AT command di bawah ini:

MSComm.Output = “AT” & Chr$(13)

MSComm..Output = “AT+CMGF=1” & Chr$(13)

Baris pertama mengirimkan command AT yang berfungsi untuk testing komunikasi, sedangkan baris kedua mengirimkan command AT+CMGF=1 yang berfungsi untuk memberikan perintah pada device untuk berada dalam mode text.

Chr$(13) merupakan karakter enter yang digunakan untuk mengakhiri perintah. Jika komunikasi berjalan dengan baik dan device GSM modem/ponsel Anda mendukung penggunaan mode text, maka property MSComm.Input akan berisi nilai OK.

Property MSComm.Input akan mengembalikan nilai ERROR jika terjadi kesalahan sintaks atau komunikasi tidak berjalan sebagaimana mestinya.

Inisialisasi berikutnya yang diperlukan adalah menentukan nomor service center yang digunakan. Nomor service center berbeda-beda tergantung pada operator GSM yang Anda gunakan.

Untuk menentukan nomor service center, digunakan AT command AT+CSCA=xxx, di mana xxx adalah nomor service center operator GSM yang Anda gunakan.

Mengirim SMS

Jika pada edisi sebelumnya Anda telah berhasil mengirimkan SMS melalui HyperTerminal, maka seharusnya Anda juga dapat melakukannya melalui control MSComm didalam Visual Basic ini.

Untuk mengirim SMS, digunakan AT command AT+CMGS. Potongan kode program dalam Visual Basic untuk mengirim SMS adalah sebagai berikut:

sTujuan = “081xxxxx”

sPesan = “Selamat Pagi”

MSComm.Output = “AT+CMGS=” & sTujuan & Chr$(13)

MSComm.Output = sPesan & Chr$(26)

Variabel sTujuan berisi dengan nomor ponsel tujuan, sedangkan variabel sPesan berisi dengan pesan SMS yang diinginkan.

Perhatikan pada baris MSComm.Output = sPesan & Chr$(26), apakah arti dari Chr$(26)? Chr$(26) merupakan karakter CTRL + Z yang berfungsi untuk mengakhiri isi pesan yang ingin dikirim.

Salah satu keuntungan menggunakan database dalam aplikasi SMS gateway adalah Anda dapat menyimpan daftar SMS yang ingin dikirimkan sebanyak yang Anda inginkan.

Anda cukup mengisi atau membuat program entry table Outbox yang telah Anda persiapkan, sehingga akan terdapat record-record yang berisi tujuan dan pesan yang siap dikirimkan melalui SMS gateway.

Aplikasi SMS gateway Anda kemudian membaca table Outbox, dan melakukan pengiriman untuk masing-masing record yang dibaca. Menarik, bukan? Anda kini telah dapat membuat sebuah aplikasi yang dapat mengirimkan SMS dalam jumlah banyak ke berbagai tujuan.

Bayangkan jika hal itu dilakukan secara manual, pastinya akan cukup merepotkan.

Record pada table Outbox yang telah terkirim, dapat Anda pindahkan kedalam table Sent Item sehingga Anda memiliki arsip SMS yang telah dikirim.

Menerima SMS

SMS gateway dapat membantu Anda menjadi penerima SMS yang baik, tanpa Anda perlu 24 jam sehari memantau SMS yang masuk. Bahkan kalau diperlukan, aplikasi SMS gateway dapat diatur agar dapat membalas secara otomatis.

Untuk menangani SMS yang masuk, aplikasi SMS harus dalam keadaan menunggu, informasi SMS yang masuk akan ditampung pada property MSComm.Input.

Terdapat event MSComm_OnComm yang dapat Anda gunakan untuk melakukan pengecekan input yang masuk. Event ini akan dijalankan setiap kali terdapat data yang diterima melalui port komunikasi yang terpasang.

Anda dapat mencoba menuliskan program sederhana seperti di bawah ini:

Private Sub MSComm_OnComm()

Dim stComChar As String * 1

Do

Loop Until MSComm.InBufferCount > 0

Do While MSComm.InBufferCount > 0

stComChar = MSComm.Input

tempBuffer = tempBuffer + stComChar

Loop

Debug.Print tempBuffer

End Sub

Jika tidak terdapat masalah, maka setiap kali SMS masuk (ataupun terjadi event lainnya seperti telpon masuk), maka event ini akan dijalankan dan program akan menuliskan isi dari data yang diterima.

Anda dapat membuat rutin untuk memeriksa isi dari data yang diterima tersebut, untuk kebutuhan SMS masuk, MSComm akan mengembalikan kode nilai +CMT atau +CMTI sebagai indikasi bahwa ada SMS yang masuk.

+CMT akan diikuti dengan informasi nomor pengirim, tanggal dan waktu, serta isi SMS yang diterima, semua informasi ini akan tersimpan dalam variabel tempBuffer di atas.

Yang perlu Anda lakukan selanjutnya adalah membuat rutin untuk melakukan parsing data dan memilah-milah antara nomor pengirim, tanggal, dan isi SMS sehingga dapat disimpan tapi di dalam table Inbox.

+CMTI tidak disertai dengan informasi lengkap seperti pada +CMT, tetapi Anda dapat menjalankanAT command AT+CMGL=”REC UNREAD”. Setelah dijalankan, AT command ini akan menghasilkan daftar SMS yang belum terbaca (unread), lengkap dengan informasi nomor pengirim, tanggal dan waktu, serta isi SMS.

Langkah Anda selanjutnya adalah melakukan parsing data dan menyimpan informasi SMS masuk tersebut ke dalam table Inbox.

Perhatikan jika Anda menjalankan lagi perintah AT+CMGL=”REC UNREAD” untuk kedua kalinya, maka hasilnya tidak sama de ngan saat pertama kali dijalankan, karena status record unread telah menjadi read (terbaca) saat AT+CMGL=”REC UNREAD” dijalankankali pertama.

Hal penting di sini adalah rutin parsing data, agar rutin tersebut mampu memilah data dengan benar.

Anda juga mungkin perlu mengetahui cara untuk menghapus SMS yang tersimpan dalam memory SIM card, gunakan AT command AT+CMGD untuk keperluan tersebut. Karena Anda harus menghindari memory SIM card penuh oleh SMS yang masuk.

Anda dapat menghapus SMS secara terjadwal ataupun setiap kali selesai membaca dan memindahkan SMS tersebut ke database.

Jika aplikasi SMS gateway Anda ditujukan untuk membalas SMS secara otomatis, maka biasanya tidak semua SMS harus dibalas. Terdapat kesepakatan format SMS yang valid untuk diproses lebih lanjut, hal seperti ini sering ditemui misalnya pada aplikasi SMS premium yang iklannya sering kita lihat di televisi, contoh ketik LELANG, RAMAL, dan kata lainnya diikuti dengan parameter yang dibutuhkan.

Kata LELANG, RAMAL, dan lain sebagainya merupakan format yang valid bagi aplikasi SMS tersebut melakukan proses selanjutnya, misalnya mengolah data yang dikirimkan lebih lanjut, dan melakukan reply SMS yang semuanya dikerjakan oleh aplikasi, Anda tentunya tidak berpikir Deddy Corbuzier bergadang semalam suntuk untuk membalas SMS Anda, bukan?

Kesalahan yang Umum Terjadi

Inti dari SMS gateway adalah proses mengirim dan menerima SMS seperti di atas, tetapi perjalanan Anda membuat SMS gateway yang baik mungkin masih harus melewati perjalanan yang cukup panjang, mungkin Anda akan menemui pelbagai error dan bugs yang memang sudah merupakan makanan sehari-hari programmer.

Kesalahan yang Anda temui pada saat development tentunya beragam. Salah satu contoh kesalahan yang mungkin terjadi adalah SMS gateway tidak berfungsi karena SIM card Anda menggunakan PIN. Untuk masalah ini Anda harus menggunakan AT command untuk mendefi nisikan PIN, yaitu AT+CPIN.

Anda juga dapat menganalisis kesalahan dari pesan error yang dihasilkan. Salah satu format pesan error yang dapat terjadi adalah +CMS Error: kode_error, di mana kode_error

Beberapa kode kesalahan yang umum adalah seperti pada

Hal lain yang perlu diingat adalah kecepatan pengiriman SMS dengan menggunakan device GSM/CDMA modem/ponsel relatif cukup lama, terutama jika dibandingkan dengan pengiriman langsung dari SMS Center.

Bisa jadi device yang Anda gunakan tidak stabil karena satu dan lain hal sehingga menyebabkan error yang sulit dilacak, ada baiknya Anda memberikan jedah waktu dalam setiap pengiriman SMS.

Kesulitan lain yang mungkin ditemui adalah saat melakukan parsing data yang masuk, contoh data yang diterima adalah seperti berikut:

+CMGL: 10,”REC UNREAD”,”+628129618870”,,”08/01/10,03:10:58

+28”

hai, apa kabar?

String berisi nomor pengirim, isi pesan, dan seterusnya, dipisahkan karakter koma. Jika Anda menggunakan function Split untuk memilah string, perhitungkan bahwa isi pesan dapat mengandung karakter koma yang tidak tentu jumlahnya, jadi pastikan function Anda dapat memilah data dengan benar.

Yang patut diingat adalah SMS gateway dengan menggunakan media modem/ponsel kurang cocok untuk informasi yang memerlukan ketepatan waktu yang tinggi sekaligus mengharuskan pengiriman SMS dalam jumlah banyak.

Penggunaan SMS Gateway Lebih Lanjut

Jika telah berhasil membuat function/rutin untuk mengirim dan menerima SMS, maka Anda telah menyelesaikan sebuah engine yang dapat dipasang pada sebuah komputer server.

Jika diperlukan user interface untuk user dapat mengirim SMS dan melihat SMS yang masuk, maka Anda dapat membuat aplikasi database yang mengakses table-table utama yang telah kita buat, yaitu Inbox, Outbox, dan Sent Item.

Lebih jauh lagi, Anda dapat membuat server SMS Anda menjadi web server agar user yang menggunakan aplikasi tersebut dapat mengaksesnya melalui HTTP.

Dengan demikian, aplikasi SMS gateway juga dapat menjadi aplikasi web dengan berbagai macam kemungkinan pengembangannya.

Tidak hanya terbatas untuk mengirim dan menerima SMS pada saat ini, aplikasi Anda juga dapat diperluas agar dapat mengirimkan SMS terjadwal. Misalnya dengan mengirimkan SMS yang telah diatur akan dikirim pada event tertentu seperti ulang tahun, perkawinan, dan seterusnya.

Akhir kata, tentunya tidak semua hal yang mengangkut SMS gateway dapat dibahas dalam artikel yang terbatas ini, tetapi tentunya diharapkan artikel ini dapat memberikan gambaran dasar mengenai pembuatan SMS gateway.[1]

LEBIH LANJUT

http://en.wikipedia.org/wiki/Short_message_service

http://en.wikipedia.org/wiki/SMS_gateway

MENGHAFAL AT COMMAND

Tulang punggung dari aplikasi SMS gateway adalah AT command yang dikenali oleh device GSM modem/ponsel yang Anda gunakan. Tetapi, mengapa AT command demikian sulit dan tidak user friendly?

Sebenarnya AT command cukup mudah untuk digunakan, lagi pula tidak semua AT command diperlukan dalam aplikasi SMS gateway Anda.

Bisa jadi AT command yang akan sering Anda gunakan dalam aplikasi tidaklah terlalu banyak, bahkan sebenarnya cukup mudah untuk diingat.

Beberapa AT command yang sering dipergunakan dan cara menghafalnya adalah sebagai berikut:

1. AT+CMGS.

Untuk mengirimkan pesan, Anda hanya perlu mengingat huruf terakhir yaitu S, yang berarti Send.

2. AT+CMGL.

Untuk menghasilkan daftar SMS yang terdapat pada inbox, L pada huruf terakhir adalah List.

3. AT+CMGR.

Untuk membaca SMS, R adalah Read.

4. AT+CMGD.

Untuk menghapus SMS, D adalah Delete. Dari empat AT command yang utama ini, memiliki persamaan yaitu semuanya diawali dengan AT+CMG.

INTRA OPERATOR DAN LINTAS OPERATOR

Sebuah SMS yang dikirim atau diterima, diatur oleh SMS center. Tanpa SMS center, tidak akan tercipta lalu-lintas komunikasi SMS.

Jika pengirim dan penerima berada pada sebuah jaringan operator yang sama, maka mereka menggunakan SMS Center yang sama dalam proses transmisinya, hal ini dinamakan transmisi intra operator.

Sedangkan, jika menggunakan operator yang berbeda, maka terdapat dua SMS Center dan proses transmisi ini dinamakan inter-operator atau lintas operator.

Dengan transmisi intra operator, umumnya dapat diperoleh biaya SMS yang lebih murah dibandingkan biaya SMS lintas operator.

Fitur SMS gateway dapat dikembangkan dengan mendukung pengiriman yang sesuai dengan nomor calon penerima, di mana aplikasi diprogram untuk menentukan pengiriman dengan nomor tertentu dengan jaringan yang sama, sehingga diberlakukan intra operator yang berarti menekan biaya agar menjadi lebih murah.

Untuk kebutuhan ini, diperlukan lebih dari satu nomor pengirim dari jaringan operator yang berbeda, tidak terbatas pada jaringan GSM, tetapi juga pada jaringan CDMA.

Tentunya Anda juga memerlukan device pendukung seperti GSM modem dan CDMA modem yang terpasang dalam satu aplikasi SMS gateway. Ini hanyalah satu contoh dari pengembangan SMS gateway yang dapat Anda lakukan.

TABEL 1. BEBERAPA KODE KESALAHAN

KODE KESALAHAN

ARTI

300

302

303

304

305

310

311

321

322

330

331

332

Kesalahan pada ME (Mobile Equipment) / device yang digunakan

Operasi yang dilakukan AT command tidak diijinkan

Operasi yang dilakukan AT command tidak

disupport

Invalid parameter pada AT command (mode PDU)

Invalid parameter pada AT command (mode text)

SIM card tidak terpasang

SIM Card memerlukan PIN

I ndex pada memory/storage invalid

Memory/storage penuh

SMS Center tidak dikenal

Network tidak available

Network time out

ARTIKEL INI ADALAH KELANJUTAN dari artikel sebelumnya yang berjudul sama. Jika belum membaca bagian pertama artikel ini, sebaiknya Anda baca dulu. Di bagian kedua ini, kita akan mendiskusikan bagaimana mengelola sesi. Pengelolaan sesi meliputi bagaimana menciptakan sesi permainan, bergabung dengan sesi yang sudah ada. Topik lain yang kita bahas adalah bagaimana mengirimkan data ke pemain lain.

Deskripsi Aplikasi

Deskripsi aplikasi diperlukan untuk identifi kasi aplikasi. Tiap aplikasi yang tergabung dalam sesi menyimpan deskripsi aplikasi masing-masing. Beberapa informasi yang dapat Anda peroleh dari deksripsi aplikasi adalah jumlah pemain yang saat ini sedang tergabung dalam sesi, jumlah total pemain yang diizinkan, nama sesi, dan lain-lain. Deskripsi aplikasi diatur menggunakan tipe TDPNApplicationDesc. Deklarasi tipe ini tercantum pada Listing 15. Field-field-nya sebagai berikut:

· dwSize, ukuran struktur data, seperti biasa harus diisi sizeof (TDPNApplicationDesc).

· dwFlags, flag deskripsi sesi permainan. Bisa salah satu nilai berikut:

1. DPNSESSION_CLIENT_SERVER. Sesi adalah model client-server.

2. DPNSESSION_MIGRATE_HOST. Status host dapat berpindah ke computer lain apabila host meninggalkan sesi permainan atau terputus koneksi jaringannya.

3. DPNSESSION_NODPNSVR, enumerasi host tidak menggunakan aplikasi DPNSVR. Lebih lanjut mengenai DPNSVR dapat Anda baca pada bagian “Enumerasi host”.

4. DPNSESSION_REQUIREPASSWORD. Untuk bergabung dengan sesi permainan, peer harus memberikan password yang sesuai. Password diset oleh host melalui field pwszPassword.

5. DPNSESSION_NOENUMS. Enumerasi tidak diizinkan.

6. DPNSESSION_FASTSIGNED. Tiap paket data yang Anda kirim akan ditambahi tanda tertentu sebanyak 8 byte. Jika flag ini dipakai dan paket data tidak berisi tanda yang sesuai, paket data tersebut diabaikan oleh DirectPlay. Lebih jauh mengenai hal ini baca ”Penandaan paket data”.

7. DPNSESSION_FULLSIGNED. Tiap paket data yang Anda kirim akan ditambahi tanda tertentu sebanyak 8 byte yang nilainya dihitung menggunakan algoritma SHA1 berdasarkan isi paket data. Lebih jauh mengenai hal ini baca ”Penandaan paket data”.

· guidInstance, GUID instance adalah GUID yang diset oleh DirectPlay. Anda mengisinya dengan GUID_NULL ketika memanggil Host().

· guidApplication, GUID aplikasi. Field ini digunakan untuk identifikasi aplikasi yang dapat bergabung dalam satu sesi. Tiap aplikasi yang tergabung dalam sebuah sesi harus memiliki guidApplication sama. Anda membuat sebuah GUID tiap kali membuat aplikasi memanfaatkan DirectPlay.

· dwMaxPlayers, jumlah maksimum pemain yang diizinkan. Jika diisi 0, jumlah pemain tak dibatasi.

· dwCurrentPlayers, jumlah pemain yang sedang tergabung dalam sesi permainan.

· pwszSessionName, nama sesi.

· pwszPassword, password untuk bergabung ke sesi.

· pvReservedData, data tercadang khusus untuk DirectPlay. Anda tidak diperkenankan mengubahnya.

· dwReservedDataSize, ukuran data tercadang milik DirectPlay. Seperti halnya pvReservedData, Anda tidak diperkenankan mengubahnya.

· pvApplicationReservedData, data milik aplikasi, bisa diisi nil bila tidak ada data spesifik milik aplikasi yang hendak disimpan.

· dwApplicationReservedDataSize, ukuran data pada pvApplicationReservedData. Jika pvApplication berisi nil, field ini harus diisi 0.

Anda bisa mengubah deskripsi aplikasi melalui fungsi Host() atau SetApplicationDesc() milik IDirectPlay8Peer. Untuk mendapatkan data deskripsi aplikasi, Anda menggunakan GetApplicationDesc(). Fungsi Host() akan kita bahas pada bagian “Menciptakan sesi permainan”. Deklarasi fungsi SetApplicationDesc dan GetApplicationDesc() ada pada Listing 16.

Untuk SetApplicationDesc(), Anda hanya bisa mengubah field berikut ini:

· dwMaxPlayers.

· pwszSessionName.

· pwszSessionPassword.

· pvApplicationReservedData.

· dwApplicationReservedDataSize.

Nilai dwMaxPlayers harus lebih besar dari dwCurrentPlayers. Pada fungsi SetApplicationDesc(), parameter pad adalah deskripsi aplikasi yang hendak diubah. dwFlags belum digunakan dan harus diisi 0. Aplikasi Anda harus bertindak sebagai host untuk bisa menjalankan perintah ini. Jika tidak, kode kesalahan DPNERR_NOTHOST akan dikembalikan.

Untuk mendapatkan deksripsi aplikasi secara akurat, Anda perlu memanggil GetApplicationDesc() dua kali. Pertama untuk mendapatkan ukuran deskripsi aplikasi sesungguhnya, kedua mendapatkan data deskripsi aplikasi.

Untuk mendapatkan ukuran deskripsi aplikasi, Anda perlu mengisi pAppDescBuffer dengan nil. pcbDataSize akan diisi dengan jumlah ukuran aktual deksripsi aplikasi. Kemudian lakukan alokasi data pAppDescBuffer sebesar pcbDataSize. Pada kedua pemanggilan GetApplicationDesc(), parameter dwFlags dapat diisi 0. Kode pada Listing 17 adalah contoh bagaimana mendapatkan nama sesi.

Penandaaan Paket Data

Penandaan paket (packet signing) adalah teknik yang digunakan oleh DirectPlay untuk mencegah pengguna berbahaya melakukan spoofing paket IP. Spoofing paket data dilakukan dengan menyisipkan paket data seolah-olah paket data tersebut berasal dari pemain dalam sesi. Packet signing dilakukan dengan cara menambahkan tanda pada paket yang dikirim. Jika paket yang diterima oleh DirectPlay tidak mengandung tanda yang benar, paket tersebut akan diabaikan oleh DirectPlay.

Teknik penandaan paket tidak mengenkripsi paket yang dikirim. Teknik ini hanya ditujukan untuk mencegah pihak ketiga menyisipkan data invalid ke sesi permainan DirectPlay. Tiap pemain yang tergabung dalam sesi harus menggunakan DirectX versi 9.0 atau lebih baru untuk bisa menggunakan fitur ini. Oleh karena itu, pemain yang menggunakan DirectX 8.1 ke bawah akan gagal bergabung ke sesi yang menggunakan packet signing.

Ada dua jenis penandaan paket pada DirectPlay. Penandaan cepat (fast signing) atau penandaan penuh (full signing).

Fast Signing

Paket data yang dikirim akan ditambahi tanda sebanyak 8 byte. Fast signing membutuhkan waktu pemrosesan lebih singkat karena DirectPlay hanya menambahkan nilai 8 byte ke paket data. Namun, mudah dibobol bila pihak ketiga mampu mengakses paket data dan menemukan 8 byte data yang ditambahkan.

Full Signing

Paket data yang dikirim akan ditambahi tanda sebanyak 8 byte. Tanda ini dihitung menggunakan algoritma Secure Hash Algorithm versi 1.0 (SHA1) berdasarkan isi paket data. Algoritma SHA1 lebih banyak mengkonsumsi waktu pemrosesan, namun lebih sulit dibobol.

Menciptakan Sesi Permainan

Anda menciptakan sesi dengan menggunakan Host() milik IDirectPlay8Peer (Listing 18). Sebelum memanggil fungsi ini, Anda perlu menyiapkan deskripsi aplikasi. Informasi ini akan digunakan peer lain untuk bergabung ke sesi permainan yang Anda ciptakan.

Parameter pdnAppDesc bertipe TDPNApplicationDesc. Lebih lanjut mengenai struktur data ini dapat Anda baca di “Deskripsi Aplikasi”. prgdDeviceInfo berisi pointer ke array instance alamat yang akan digunakan untuk membuat host. cDeviceInfo berisi jumlah elemen dalam array prgpDeviceInfo. pdnSecurity dan pdnCredentials belum dipakai dan harus diisi nil. pvPlayer-Context adalah data spesifi k milik player. dwFlags bisa diisi 0 atau flag DPNHOST_OKTOQUERYFORADDRESSING. Flag ini menyebabkan DiretPlay akan menampilkan dialog box bila membutuhkan informasi tambahan dari user.

Pada Listing 19, Anda bisa mempelajari potongan kode bagaimana menciptakan host. Pada potongan kode tersebut mula-mula kita siapkan deskripsi aplikasi seperti GUID aplikasi, jumlah maksimum pemain yang diizinkan bergabung dalam satu sesi, nama sesi.

Pada bagian kode yang mengubah nama sesi, variabel SessionName diasumsikan bertipe string dan wName bertipe widestring. Jika FMigrateHostEnabled berisi TRUE, kita atur agar sesi dapat melakukan migrasi host. Bila peer yang bertindak sebagai host meninggalkan sesi, status sebagai host dapat dilimpahkan ke peer lain.

Terakhir kita panggil fungsi Host(). FaddrNet bertipe IDirectPlay8Address yang sudah kita set sebelumnya. Parameter cDeviceInfo kita isi dengan 1 karena kita hanya menggunakan 1 instance alamat. Parameter sisanya kita isi dengan nil dan 0.

Jika sukses, variabel hr akan berisi S_OK, atau jika gagal, berisi kode kesalahan DPNERR_INVALIDPARAM bila parameter tidak benar, DPNERR_INVALIDDEVICEADDRESS bila device tidak valid atau DPNERR_DATATOOLARGE bila ukuran data deskripsi aplikasi terlalu besar melebihi yang mampu ditransfer oleh service provider.

Bergabung ke Sebuah Sesi

Untuk bergabung dengan sesi yang sudah ada, Anda menggunakan fungsi Connect() milik IDirectPlay8Peer (Listing 20). Anda butuh deskripsi aplikasi sesi yang hendak Anda ikuti. Anda bisa mendapatkan deskripsi aplikasi sesi-sesi yang ada dengan melakukan enumerasi. Silakan baca bagian “Enumerasi Host”. Sebelum memanggil Connect(), Anda perlu mendeskripsikan informasi peer dengan SetPeerInfo() sama seperti pada Listing 13.

Untuk koneksi ke sesi, Anda butuh dua instance alamat, alamat host dan alamat device yang Anda pergunakan. Untuk mendapatkan alamat host, Anda bisa memperolehnya melalui enumerasi. pdnSecurity dan pdnCredentials belum dipakai dan harus diisi nil.

pvUserConnectData dan dwUserConnectDataSize masing-masing berisi pointer dan ukuran data yang akan dikirim ke host ketika peer melakukan koneksi. Biasanya berisi data untuk validasi lebih lanjut agar host dapat menentukan apakah peer diizinkan bergabung atau tidak. Kedua parameter ini tidak wajib dan bisa diisi nil. Bila pvUserConnectData bernilai nil, dwUserConnectDataSize harus bernilai 0.

pvPlayerContext adalah data terkait pemain, misalnya data status kesehatan dan senjata pemain dalam sebuah sesi permainan. Data ini bisa diabaikan karena nantinya diset ketika pesan DPN_MSGID_CREATE_PLAYER dikirim ke fungsi callback kita.

pvAsyncContext dan phAsyncHandle, masing-masing adalah pointer ke data dan handle untuk proses koneksi asynchronous. Pada koneksi yang asynchronous, Connect() akan mengembalikan kode DPNSUCCESS_PENDING dan segera mengembalikan kontrol ke aplikasi tanpa menunggu koneksi selesai. Ketika koneksi selesai, fungsi callback akan menerima pesan DPN_MSGID_CONNECT_COMPLETE bersama dengan data yang ada pada pvAsyncContext. Handle yang Anda terima di phAsyncHandle dapat Anda pergunakan untuk membatalkan koneksi.

Parameter terakhir adalah flag koneksi. Proses koneksi secara default bersifat asynchronous. Untuk melakukan koneksi synchronous, dwFlags diisi DPNCONNECT_SYNC. Parameter pvAsyncContext dan phAsyncHandle harus diisi nil bila menggunakan flag ini.

Sebelum memanggil Connect(), Anda perlu memanggil SetPeerInfo() untuk mendeskripsikan informasi peer. Silakan Anda pelajari Listing 13 untuk contoh bagaimana mengatur deksripsi peer.

Listing 21 berisi contoh pemanggilan fungsi Connect() untuk melakukan koneksi synchronous. Di listing tersebut, AppDesc diasumsikan berisi deskripsi aplikasi sebuah sesi, Addr berisi alamat host dan FAddrNet berisi instance alamat yang dipergunakan aplikasi Anda.

Enumerasi Host

Permainan pada game multiplayer online biasanya dimulai ketika dua atau lebih pemain tergabung ke sebuah sesi. Ada dua pilihan dalam memulai permainan game multiplayer online, membuat sesi permainan dan menunggu pemain lain bergabung atau bergabung dengan sesi permainan yang sudah ada.

Membuat sesi permainan sudah kita bahas di bagian “Menciptakan sesi permainan”, lalu bagaimana bila kita hendak bergabung dengan sesi yang sudah ada? Bagaimana menemukan sesi-sesi tersebut? Untuk menemukan sesi-sesi permainan yang bisa kita ikuti, kita panggil fungsi EnumHosts() milik IDirectPlay8Peer (Listing 22).

Parameter pApplicationDesc berisi deskripsi aplikasi, Anda perlu mengisi field dwSize dengan ukuran TDPNApplicationDesc dan guidApplication dengan GUID aplikasi Anda. GUIDini dipergunakan untuk membandingkan host yang kompatibel dengan aplikasi Anda. Jika guidApplication nil, enumerasi akan dikirim ke semua host. Field lain harus diisi dengan 0.

Parameter pAddrHost bisa diisi nil untuk mencari semua host atau isi dengan alamat host tertentu. pDeviceInfo diisi dengan alamat aplikasi Anda. Parameter pUserEnumData dan dwUser-DataSize berisi pointer dan ukuran data yang akan dilewatkan ke callback. dwEnumCount menentukan berapa kali enumerasi dilakukan. dwRetryInterval berisi interval retry jika diisi 0 nilai default yang dipakai. dwTimeOut berisi waktu timeout dalam milidetik.

pvUserContext adalah data terkait aplikasi. pAsyncHandle akan diisi handle untuk enumerasi asynchronous. dwFlags berisi flag enumerasi. Untuk menggunakan enumerasi synchronous, isi dwFlags dengan DPNENUMHOSTS_SYNC dan pAsyncHandle harus diisi nil. Untuk contoh bagaimana memanggil Enum-Hosts(), silakan Anda pelajari Listing 23.

Aplikasi yang melakukan enumerasi akan menerima pesan DPN_MSGID_ENUM_HOSTS_RESPONSE pada fungsi callback tiap kali host ditemukan. Kita akan bahas lebih jauh bagaimana menangani pesan ini pada bagian “Menangani Pesan Jaringan”.

Tentang aplikasi DPNSVR

Secara default, semua permintaan enumerasi host oleh suatu peer terlebih dahulu akan melalui aplikasi DPNSVR. DPNSVR bertindak sebagai forwarding service yang menjembatani klien/peer dengan host (Gambar 5). Mengapa harus ada aplikasi DPNSVR?

Operating system Windows hanya mengizinkan satu proses untuk menggunakan satu port pada protokol TCP/IP atau IPX. Dua proses tidak dapat berbagi sebuah port yang sama. Hal ini menimbulkan masalah. Bagaimana menemukan host-host pada sebuah komputer bila klien sama sekali tidak punya informasi di port mana host-host tersebut berada? DPNSVR memecahkan isu ini dengan menggunakan port yang sudah diketahui untuk menerima permintaan enumerasi klien/peer. Tiap host yang memulai sesi permainan, memberitahu DPNSVR di port mana ia berjalan. Tiap kali ada permintaan enumerasi, request tersebut melalui DPNSVR dan diteruskan ke masing-masing host melalui port masing-masing. Host merespon permintaan dengan mengikutsertakan nomor port yang digunakan kembali ke klien.

Secara default, fitur DPNSVR ini hidup. DPNSVR otomatis akan jalan ketika Anda menciptakan sesi dan akan mati otomatis ketika tidak ada aplikasi yang menggunakannya selama 30 detik. Anda dapat mematikan fitur DPNSVR dengan mengubah field dwFlags pada deskripsi aplikasi dengan menggunakan flag DPNSESSION_NODPNSVR. Ada beberapa alasan mengapa tidak menggunakan DPNSVR:

· Anda ingin membatasi klien/peer yang melakukan enumerasi. Hanya klien/peer yang tahu port di mana aplikasi host berjalan yang bisa melakukannya.

· Hanya ada satu aplikasi host dan Anda tahu port mana yang digunakan.

Mengirimkan Data

Anda sudah mampu bergabung dengan sebuah sesi, mampu mencari sesi-sesi permainan dan juga dapat membuat sesi Anda sendiri. Namun, semuanya tak akan berarti bila Anda tidak mampu mengirim pesan atau data ke peer lain.

Untuk mengirim data, Anda menggunakan SendTo() milik IDirectPlay8Peer (Listing 24). Parameter dpnid adalah pengenal player yang dituju. Jika Anda ingin mengirim ke semua player sekaligus menggunakan DPNID_ALL_PLAYERS_GROUP. prgBufferDesc akan menyimpan data yang hendak dikirim. cBufferDesc berisi jumlah buffer yang ditunjuk prgBufferDesc.

dwTimeOut adalah waktu tunggu dalam milidetik. Bila data tidak terkirim setelah lebih dari dwTimeOut, pesan akan dihapus dari antrian. Jika dwTimeOut diisi 0, pesan yang dikirim tidak akan dihapus dari antrian sampai pesan tersebut terkirim atau koneksi terputus. pAsyncContext adalah pointer ke data milik aplikasi yang dipergunakan untuk pengiriman pesan asynchronous. pAsyncHandle akan diisi dengan handle yang bisa Anda pergunakan untuk membatalkan pengiriman pesan asynchronous.

dwFlags berisi flag yang mengatur perilaku pengiriman. Anda bisa menggunakan flag-flag seperti tercantum pada Tabel 6. Pada operasi asynchronous, Anda akan menerima pesan DPN_MSGID_SEND_COMPLETE ketika pesan sudah terkirim. DirectPlay tidak menjamin pesan akan diterima oleh penerima, namun Anda bisa mengubah perilaku ini menggunakan flag-flag pengiriman.

Ketika data sampai ke penerima, callback penerima akan dikirim pesan DPN_MSGID_RECEIVE. Untuk menangani pesan ini silakan baca “Menangani Pesan Jaringan” di subbagian “Data diterima”.

Secara default, fungsi SendTo() akan mengembalikan nilai DPNSUCCESS_PENDING.. Nilai S_OK hanya dikembalikan bila pengiriman sukses dan dilakukan secara synchronous. Jika dalam sesi hanya ada host tanpa ada player lain yang tergabung, kode kesalahan yang dikembalikan adalah DPNERR_GENERIC.

Membatalkan Operasi Asynchronous

Kita sudah menyinggung masalah operasi asynchronous. Anda mungkin pada situasi tertentu ingin membatalkan operasi asyn-chronous yang sedang dikerjakan namun belum selesai. Untuk membatalkannya, DirectPlay menyediakan CancelAsyncOperation() milik interface IDirectPlay8Peer (Listing 25).

Parameter hAsyncHandle adalah handle operasi yang akan dihentikan. Anda memperoleh handle ini pada saat menjalankan operasi asynchronous seperti enumerasi sesi, bergabung ke sesi atau mengirim data ke pemain lain. dwFlags adalah keterangan operasi yang akan dibatalkan. Anda bisa menggunakan flag yang tercantum pada Tabel 7.

Jika hAsyncHandle berisi handle valid, dwFlags harus diisi 0. Isi parameter hAsyncHandle juga tergantung pada isi parameter dwFlags. Pada beberapa flag, hAsyncHandle tidak diisi dengan handle operasi melainkan pengenal pemain (DPNID).

Meninggalkan dan Menutup Sesi

Untuk meninggalkan sebuah sesi permainan, Anda memanggil Close() (Listing 26). Jika aplikasi Anda bertindak sebagai host, pemanggilan Close() akan menyebabkan sesi permainan ditutup bila sesi tersebut tidak dibuat mampu bermigrasi host. Bila fitur migrasi host dihidupkan, status host akan ditransfer ke peer lain dan sesi permainan berlanjut. Parameter dwFlags dapat diisi dengan DPNCLOSE_IMMEDIATE untuk segera meninggalkan sesi. Player lain dalam sesi akan menerima pesan DPN_MS-GID_DESTROY_PLAYER setelah pemanggilan Close().

Untuk menutup sesi secara eksplisit, Anda dapat memanggil TerminateSession() (Listing 26), syaratnya Anda berstatus sebagai host. Parameter pvTerminateData adalah data yang akan dikirim ke callback ketika menerima pesan DPN_MS-GID_TERMINATE_SESSION. Parameter dwTerminateDataSize berisi ukuran data yang ada di pvTerminateData. dwFlags masih dicadangkan dan harus diisi 0.

Ringkasan

Di artikel bagian kedua ini Anda telah belajar bagaimana menciptakan sesi permainan, bergabung dengan sesi yang sudah ada, mencari sesi-sesi yang ada melalui enumerasi, menutup sesi dan juga bagaimana mengirim data ke pemain lain. Sampai di sini Anda diharapkan telah paham bagaimana mengelola sebuah sesi permainan.

Pada artikel berikutnya, kita akan mendiskusikan bagaimana memproses pesan-pesan yang dikirim DirectPlay ke aplikasi melalui callback dan menggabungkan semua informasi yang sudah kita peroleh menjadi sebuah aplikasi utuh.[1]

LEBIH LANJUT

TABEL 6. FLAG PENGIRIMAN PESAN

FLAG

KETERANGAN

DPNSEND_SYNC

DPNSEND_NOCOPY

DPNSEND_NOCOMPLETE

DPNSEND_COMPLETEONPROCESS

DPNSEND_GUARANTEED

DPNSEND_PRIORITY_HIGH

DPNSEND_PRIORITY_LOW

DPNSEND_NOSEQUENTIAL

DPNSEND_NOLOOPBACK

DPNSEND_COALESCE

Pesan dikirim secara synchronous.

PasyncContext dan pAsyncHandle harus diisi nil.

Data yang dikirim tidak dikopi ke buffer internal.

Hal ini mempercepat proses pengiriman, namun

hal ini berpotensi menimbulkan problem bila data

diubah atau dihapus sebelum terkirim.

Pesan DPN_MSGDID_SEND_COMPLETE tidak

akan dikirim ke callback. Jika menggunakan

flag ini, pAsyncContext harus nil dan tidak bisa

dikombinasi dengan DPNSEND_GUARANTEED dan DPNSEND_NOCOPY.

Pesan DPN_MSGDID_SEND_COMPLETE hanya

akan dikirim ke callback apabila data sudah

terkirim dan sampai ke penerima. Flag ini

harus dikombinasi dengan flag DPNSEND_

GUARANTEED.

Data dijamin akan terkirim ke penerima.

DirectPlay akan mengirim ulang paket data yang

drop sebelum sampai ke penerima

Data berprioritas tinggi. Tidak dapat dikombinas

dengan DPNSEND_PRIORITY_LOW.

Data berprioritas tinggi. Tidak dapat dikombinasi

dengan DPNSEND_PRIORITY_HIGH.

Tanpa flag ini, data akan sampai ke penerima

dengan urutan sesuai urutan waktu pengiriman.

Bila flag ini dipakai, data akan sampai sesuai

urutan waktu sampai ke penerima.

Ketika Anda mengirim ke semua player yang

ada di grup dimana Anda termasuk di dalamnya,

Anda sebagai pengirim juga akan menerima

DPN_MSGID_RECEIVE. Gunakan fl ag ini untuk

mencegah pesan DPN_MSGID_RECEIVE dikirim

ke callback Anda sendiri.

Jika flag ini dipakai, DirectPlay akan

menggabung data yang ada dalam antrian untuk

dikirim hingga 32 data ke dalam satu blok

(frame). Fitur ini hanya tersedia di DirectX 9.0.

Jika penerima tidak menggunakan versi DirectX

9.0, penggabungan tidak bisa dilakukan.

TABEL 7. FLAG PEMBATALAN OPERASI ASYNCHRONOUS

FLAG

KETERANGAN

DPNCANCEL_ENUM

DPNCANCEL_CONNECT

DPNCANCEL_SEND

DPNCANCEL_PLAYER_SENDS

DPNCANCEL_PLAYER_SENDS_PRIORITY_LOW

DPNCANCEL_PLAYER_SENDS_PRIORITY_NORMA

DPNCANCEL_PLAYER_SENDS_PRIORITY_HIGH

DPNCANCEL_ALL_OPERATIONS

Membatalkan semua enumerasi.

hAsyncHandle harus diisi 0.

Membatalkan semua koneksi ke

sesi. HasyncHandle harus diisi 0.

Membatalkan semua pengiriman

data. HasyncHandle harus diisi 0

Membatalkan semua operasi

pengiriman data ke player

yang DPNID-nya ada pada

hAsynHandle.

Membatalkan semua operasi

pengiriman data prioritas rendah

ke player yang DPNID-nya ada

pada hAsynHandle.

Membatalkan semua operasi

pengiriman data berprioritas

normal ke player yang DPNID-

nya ada pada hAsynHandle.

Membatalkan semua operasi

pengiriman data berprioritas

tinggi ke player yang DPNID-nya

ada pada hAsynHandle.

Membatalkan semua operasi.

hAsyncHandle harus diisi 0.

Listing 15

type

PDPNApplicationDesc = ^TDPNApplicationDesc;

_DPN_APPLICATION_DESC = packed record

dwSize: DWORD; // Size of this

structure

dwFlags: DWORD; // Flags (DPNSESSION_

…)

guidInstance: TGUID; // Instance GUID

guidApplication: TGUID; // Application GUID

dwMaxPlayers: DWORD; // Maximum # of players

allowed (0=no limit)

dwCurrentPlayers: DWORD; // Current # of

players allowed

pwszSessionName: PWideChar; // Name of the

session

pwszPassword: PWideChar; // Password for the

session

pvReservedData: Pointer;

dwReservedDataSize: DWORD;

pvApplicationReservedData: Pointer;

dwApplicationReservedDataSize: DWORD;

end;

{$EXTERNALSYM _DPN_APPLICATION_DESC}

DPN_APPLICATION_DESC = _DPN_APPLICATION_DESC;

{$EXTERNALSYM DPN_APPLICATION_DESC}

TDPNApplicationDesc = _DPN_APPLICATION_DESC;

Listing 16

function SetApplicationDesc(const pad: TDPNApplicationDesc;

dwFlags: DWORD): HResult; stdcall;

function GetApplicationDesc(pAppDescBuffer:

PDPNApplicationDesc;

var pcbDataSize: DWORD;

dwFlags: DWORD): HResult; stdcall;

Listing 17

function getSessionName(apeer:IDirectPlay8Peer):string;

var appDesc:PDPNApplicationDesc;

appDescSize:Dword;

begin

apeer.GetApplicationDesc(nil,appDescSize,0);

GetMem(appDesc,appDescSize);

try

ZeroMemory(appDesc,Sizeof(TDPNApplicationDec));

appDesc.dwSize:=Sizeof(TDPNApplicationDec);

apeer.GetApplicationDesc(appDesc,appDescSize,0);

result:=WideCharToString(appDesc.pwszSessionName);

nally

FreeMem(appDesc,appDescSize);

end;

end;

Listing 18

function Host(const pdnAppDesc: TDPNApplicationDesc;

prgpDeviceInfo: PIDirectPlay8Address;

cDeviceInfo: DWORD;

pdnSecurity: PDPNSecurityDesc;

pdnCredentials: PDPNSecurityCredentials;

pvPlayerContext: Pointer;

dwFlags: DWORD): HResult; stdcall;

Listing 19

zeroMemory(@appDesc,sizeof(TDPNApplicationDesc));

appDesc.dwSize:=sizeof(TDPNApplicationDesc);

appDesc.guidApplication:=FAppGUID;

appDesc.dwMaxPlayers:=Maxplayer;

if FMigrateHostEnabled then

appDesc.dwFlags:=appDesc.dwFlags OR DPNSESSION_MIGRATE_

HOST;

wName:=SessionName;

appDesc.pwszSessionName:=PWidechar(wName);

hr:=FPeerNet.Host(appDesc,@FAddrNet,1,nil,nil,nil,0);

Listing 20

function Connect(const pdnAppDesc: TDPNApplicationDesc;

pHostAddr: IDirectPlay8Address;

pDeviceInfo: IDirectPlay8Address;

pdnSecurity: PDPNSecurityDesc;

pdnCredentials: PDPNSecurityCredentials;

pvUserConnectData: Pointer;

dwUserConnectDataSize: DWORD;

pvPlayerContext,

pvAsyncContext: Pointer;

phAsyncHandle: PDPNHandle;

dwFlags: DWORD): HResult; stdcall;

Listing 21

hr:=FPeerNet.Connect(AppDesc,

Addr,

FAddrNet,

nil,nil,nil,

0,nil,nil,

nil,DPNCONNECT_SYNC);

Listing 22

function EnumHosts(const

pApplicationDesc: TDPNApplicationDesc;

pAddrHost,

pDeviceInfo: IDirectPlay8Address;

pUserEnumData: Pointer;

dwUserEnumDataSize,

dwEnumCount,

dwRetryInterval,

dwTimeOut: DWORD;

pvUserContext: Pointer;

pAsyncHandle: PDPNHandle;

dwFlags: DWORD): HResult; stdcall;

Listing 23

ZeroMemory(@desc,sizeof(TDPNApplicationDesc));

desc.dwSize:=sizeof(TDPNApplicationDesc);

desc.guidApplication:=FAppGUID;

hr:=FPeerNet.EnumHosts(desc,nil,aAddress,nil,

0,0,0,0,nil,nil,

DPNENUMHOSTS_SYNC);

Listing 24

function SendTo(dpnid: TDPNID;

const prgBufferDesc: TDPNBufferDesc;

cBufferDesc,

dwTimeOut: DWORD;

pvAsyncContext: Pointer;

phAsyncHandle: PDPNHandle;

dwFlags: DWORD): HResult; stdcall;

Listing 25

function CancelAsyncOperation(

hAsyncHandle: TDPNHandle;

dwFlags: DWORD): HResult; stdcall;

Listing 26

function Close(dwFlags: DWORD): HResult; stdcall;

function TerminateSession(pvTerminateData: Pointer;

dwTerminateDataSize,

dwFlags: DWORD): HResult; stdcall;

PESERTA PERTAMA adalah seorang ibu peserta arisan yang memiliki keistimewaan mampu menceritakan sebuah kejadian yang berlangsung 5 menit menjadi berdurasi beberapa jam, di mana sang lawan bicara sebaiknya memiliki prinsip: kuping boleh panas, tetapi hati tetap dingin.

Peserta kedua adalah sepasang muda-mudi yang sedang jatuh cinta dan mampu berkomunikasi dalam waktu yang sangat lama, hingga tercipta istilah sepiring berdua dan dunia hanya milik berdua.

Rekor ini bertahan selama berhari-hari, setelah pasangan tersebut akhirnya memilih diam (dan menciptakan istilah piring terbelah dua dan perang dunia kedua).

Saat mahkota pemenang sudah akan diserahkan pada peserta kedua, muncul peserta ketiga yang mengklaim mampu berkomunikasi 24 jam tanpa henti setiap harinya dalam batas waktu yang tidak dapat ditentukan, mengagumkan! Sang jawara itu bernama…socket jaringan!

Mengenal Socket

Bayangkan sebuah server game online yang berkomunikasi tanpa henti, dimainkan oleh entah berapa banyak client yang tersebar. Ini merupakan salah satu contoh aplikasi dari sekian banyak aplikasi yang menggunakan socket jaringan untuk saling berkomunikasi dan bertukar data.

Komunikasi socket jaringan memang tidak mengenal lelah, pertukaran data terjadi terus-menerus dan memegang peranan vital. Jika oleh karena suatu hal komunikasi berhenti karena maintenance, kerusakan, ataupun sebab lainnya, maka dapat dipastikan para penggunanya akan kecewa.

Maka dari itu, komunikasi jaringan selalu diusahakan tidak terhenti. Demikianlah tugas berat yang harus dilakukan socket jaringan. Sebelum membahas lebih jauh, apakah sebenarnya pengertian socket itu?

Pengertian socket adalah interface pada jaringan yang menjadi titik komunikasi antarmesin pada Internet Protocol, dan tentunya tanpa komunikasi ini, tidak akan ada pertukaran data dan informasi jaringan.

Socket terdiri dari elemen-elemen utama sebagai berikut:

1. Protokol.

2. Local IP.

3. Local Port.

4. Remote IP.

5. Remote Port.

Dalam komunikasi antara dua pihak, tentunya harus digunakan kesepakatan aturan dan format yang sama agar komunikasi dapat dimengerti. Seperti halnya dua orang yang menggunakan bahasa yang sama, maka bahasa di sini berfungsi sebagai protokol. Protokol yang digunakan dalam socket dapat menggunakan TCP ataupun UDP.

Contoh komunikasi sederhana adalah komunikasi antara komputer A dan komputer B. Baik komputer A maupun komputer B harus memiliki identitas unik, yang direpresentasikan oleh IP masing-masing.

Komunikasi yang terjadi melalui port, sehingga baik komputer A maupun komputer B harus memiliki port yang dapat diakses satu sama lain.

TCP dan UDP

Pemrograman socket adalah cara untuk menggunakan komponen/API (Application Programming Interface) socket untuk membuat sebuah aplikasi.

Aplikasi socket umumnya terdiri dari dua kategori berdasarkan pengiriman datanya, yaitu:

1. Datagram socket (menggunakan UDP).

2. Stream socket (menggunakan TCP).

Terdapat perlakuan yang berbeda antara UDP dan TCP, walaupun sama-sama berfungsi sebagai protokol pertukaran data.

UDP tidak memerlukan proses koneksi terlebih dahulu untuk dapat mengirimkan data, paket-paket data yang dikirimkan UDP bisa jadi melalui rute yang berbeda-beda, sehingga hasil yang diterima bisa jadi tidak berurutan.

Contohnya jika aplikasi socket pengirim mengirimkan berturut-turut pesan 1, pesan 2, dan pesan 3, maka aplikasi socket penerima belum tentu mendapatkan pesan yang berurutan dimulai dari pesan 1, pesan 2, dan terakhir pesan 3. Bisa saja pesan 2 terlebih dulu diterima, menyusul pesan-pesan yang lain, atau berbagai kemungkinan lainnya. Bahkan, dapat terjadi pesan yang dikirimkan tidak sampai ke penerima karena kegagalan pengiriman paket data.

Tidak demikian halnya dengan stream socket yang menggunakan TCP. Jenis ini mengharuskan terjadinya koneksi terlebih dahulu, kemudian mengirimkan paket-paket data secara berurutan, penerima juga dijamin akan menerima data dengan urutan yang benar, dimulai dari data pertama yang dikirimkan hingga data terakhir. TCP dapat menangani data yang hilang, rusak, terpecah, ataupun terduplikasi.

Dari sekilas perbedaan ini, kita dapat menarik kesimpulan bahwa aplikasi socket yang menggunakan TCP memerlukan pertukaran data dua arah yang valid. Sedangkan, aplikasi socket yang menggunakan UDP lebih memprioritaskan pada pengumpulan data.

Karena itu aplikasi socket dengan TCP sering diterapkan untuk aplikasi chat, transfer file, ataupun transaksi-transaksi penting. Sedangkan aplikasi socket dengan UDP cocok diterapkan untuk aplikasi monitoring jaringan, game online, dan aplikasi-aplikasi broadcast.

Port

Salah satu elemen penting yang digunakan dalam aplikasi socket adalah port. Port merupakan sebuah koneksi data virtual yang digunakan aplikasi untuk bertukar data secara langsung.

Terdapat banyak port di dalam sebuah sistem komputer dengan fungsinya masing-masing. Sebagai contoh, dalam mengirim e-mail digunakan service SMTP yang umumnya menggunakan port 25. Sementara service POP3 untuk menerima e-mail menggunakan port 110, port 80 digunakan untuk HTTP, port 443 digunakan untuk HTTPS, dan seterusnya.

Nomor-nomor port dikategorikan dalam tiga jenis sebagai berikut:

1. Well-known ports.

Merupakan port yang telah digunakan secara internal oleh sistem Windows, misalnya port untuk koneksi Internet, service FTP, dan seterusnya. Port yang telah digunakan ini adalah port 0 sampai dengan port 1023.

2. Registered ports.

Port ini dapat digunakan dalam aplikasi Anda, range-nya adalah port 1024 hingga port 49151, cukup banyak port yang tersedia yang bebas Anda pilih sehingga Anda tidak perlu kuatir kekurangan port untuk aplikasi Anda.

3. Dynamic/Private ports.

Dari port 49152 sampai dengan port 65535.

Winsock

Untuk pemrograman aplikasi socket berbasis Windows, maka komponen API yang sering digunakan adalah Winsock (Win-dows Socket API) yang mendukung interface standar TCP/IP, yang merupakan protokol jaringan paling popular saat ini (contoh protokol jaringan yang lain adalah NetBIOS, IPX dari Novell, AppleTalk dari Apple, dan seterusnya).

Pengertian TCP/IP (TCP over IP) mungkin dapat menjadi sedikit rancu jika diartikan TCP/IP hanya mengizinkan pengiriman TCP (dan tidak UDP), padahal seperti yang telah kita bahas, pengiriman socket dapat melalui TCP maupun UDP.

Pengertian TCP/IP di sini sebenarnya digunakan untuk menunjukkan teknologi jaringan/Internet, termasuk di dalamnya adalah UDP. Jika Anda menggunakan UDP, dapat juga disebut sebagai UDP/IP (UDP over IP), tetapi umumnya istilah ini jarang digunakan dan istilah TCP/IP telah mencakup, baik TCP maupun UDP.

Pada bahasa pemrograman visual seperti Visual Basic/Delphi, Anda dapat menggunakan control Winsock yang telah disediakan untuk mengembangkan aplikasi socket.

Walaupun kita akan mencontohkan aplikasi socket dalam environment Windows, Anda tidak perlu khawatir jika aplikasi socket yang menggunakan Winsock tidak dapat berkomunikasi dengan aplikasi socket berbasis Unix/Linux, karena komunikasi tetap dapat terjadi selama aplikasi tersebut menggunakan protokol jaringan yang sama.

Kalau demikian, untuk mencoba aplikasi socket, apakah mutlak diperlukan setidaknya jaringan dengan minimal dua komputer yang saling terkoneksi? Bagi Anda yang terpaksa hanya menggunakan satu komputer, dapat memanfaatkan alamat localhost atau 127.0.0.1 yang mengizinkan dua aplikasi berjalan pada satu mesin komputer dan berkomunikasi satu sama lain.

Aplikasi Server

Untuk membuat aplikasi socket yang sederhana, tidak diperlukan langkah-langkah yang rumit. Kita akan mencoba membuat dua buah aplikasi, yang pertama adalah aplikasi server yang akan menerima data, sedangkan aplikasi kedua adalah aplikasi client yang mengirimkan data pada server. Baik aplikasi server dan aplikasi client mendefi nisikan port yang sama sebagai jalur komunikasi.

Contoh program dibuat dengan menggunakan Visual Basic 6. Konsep pemrograman yang serupa juga dapat Anda implementasikan pada bahasa pemrograman lain seperti Visual Basic.NET, Delphi, dan lain sebagainya.

Kita akan memulainya dengan aplikasi server, tugas aplikasi server cukup sederhana, yaitu hanya siap sedia menerima data yang masuk pada sebuah port. Control yang Anda perlukan adalah control winsock bernama Winsock1 dan sebuah textbox bernama Text1. Pada event Form_Load, tuliskan kode program di bawah

ini:

Private Sub Form_Load()

With Winsock1

.LocalPort = 1025

.Listen

End With

End Sub

Kode program tersebut melakukan inisialisasi socket, socket memilih port 1025 pada komputer server dan menunggu data yang masuk melalui port tersebut dengan perintah Listen.

Selanjutnya pada event Winsock1_ConnectionRequest, ketikkan kode program berikut:

Private Sub Winsock1_ConnectionRequest(ByVal requestID As

Long)

If Winsock1.State <> sckClosed Then Winsock1.Close

Winsock1.Accept requestID

End Sub

Kode program di atas berfungsi untuk menerima request koneksi. Selanjutnya pada event Winsock1_DataArrival, ketikkan kode program berikut:

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim strData As String

Winsock1.GetData strData

Text1.Text = Text1.Text & strData

End Sub

Kode program di atas berfungsi untuk mengambil data yang diterima oleh socket dan menampilkannya pada Text1. Aplikasi server telah selesai!

Aplikasi Client

Seperti aplikasi server, Anda perlu menyiapkan control Winsock dan Text, ditambah sebuah control Command Button yang dapat Anda namakan cmdKirim yang berfungsi untuk mengirimkan data yang diketik pada Text1 ke aplikasi server.

Pada event Form_Load, ketikkan kode program di bawah:

Private Sub Form_Load()

With Winsock1

.RemoteHost = “127.0.0.1”

.RemotePort = 1025

.Connect

End With

End Sub

Kode program di atas berfungsi untuk melakukan inisialisasi, tentukan IP tujuan/server/remote dengan 127.0.0.1 seperti pada contoh jika Anda mencoba aplikasi ini dengan menggunakan satu mesin komputer.

Jika Anda mencobanya dengan menggunakan dua komputer dalam sebuah jaringan, isikan dengan IP komputer yang berfungsi sebagai server.

Selanjutnya pada cmdKirim, ketikkan kode program sebagai berikut:

Private Sub cmdKirim_Click()

If Winsock1.State = sckConnected Then

Winsock1.SendData Text1.Text

End If

End Sub

Kode program di atas akan mengirimkan pesan yang Anda ketik pada textbox Text1 pada aplikasi server.

Selesailah sudah aplikasi server dan client. Cukup mudah, bukan? Anda dapat melakukan uji coba dengan menjalankan aplikasi server pada komputer yang berfungsi sebagai server (ataupun komputer yang sama dengan aplikasi client jika Anda menggunakan 127.0.0.1 sebagai remote IP).

Jalankan aplikasi client, dan ketik kata-kata yang Anda inginkan, lalu tekan Command Button cmdKirim, maka aplikasi server akan menampilkan pesan yang Anda ketikkan

tersebut.

Dari program sederhana ini, Anda dapat mengembangkannya menjadi aplikasi socket yang sesuai dengan keperluan Anda, penggunaannya sangat luas dan bisa jadi sangat bermanfaat, misalnya aplikasi instant messenger seperti Yahoo! Messenger ataupun MSN Messenger yang merupakan aplikasi socket yang banyak digunakan.

Pengolahan Data

Komunikasi data antara server dan client di atas merupakan bentuk komunikasi satu arah sederhana. Data yang dikirimkan dari client pun merupakan data mentah yang tidak memerlukan pengolahan data lebih lanjut.

Anda dapat membuat sendiri function dan rutin untuk mengolah data yang dikirim dan diterima sesuai dengan kebutuhan aplikasi, karena data yang dikirimkan antarmesin bisa jadi sangat bervariasi.

Misalnya saja aplikasi server/client Anda memerlukan pertukaran data identitas mesin, tanggal, jam, header pesan, isi pesan, dan lain sebagainya. Anda dapat mengirimkannya dalam format tertentu, misalnya bentuk string dengan karakter pemisah untuk membedakan masing-masing field.

Dalam komunikasi data di dalam jaringan, Anda perlu mempertimbangkan besarnya data yang lalu-lalang pada jaringan, baik dengan menggunakan TCP maupun UDP. Keduanya harusdipersiapkan untuk mampu menangani data yang besar jika memang pengguna aplikasi socket Anda sangat luas.

Pastinya tidak terdapat masalah yang berarti jika Anda mencobanya dengan dua atau beberapa komputer dalam sebuah jaringan lokal, tetapi coba bayangkan seberapa besar total data yang harus dikirim dan diterima pada sebuah aplikasi game online, misalnya.

Pada contoh game online, sebuah server harus dipersiapkan untuk mampu melayani sedemikian banyak client, dan jaringan yang digunakan bukan lagi jaringan lokal, tetapi sudah merupakan jaringan Internet, di mana siapapun dapat menggunakan aplikasi Anda selama ia memiliki koneksi Internet.

Mungkin Anda bertanya, jika data yang keluar-masuk memerlukan pengolahan lebih lanjut, mengapa tidak digunakan database, sehingga Anda tidak perlu pusing membuat rutin atau modul untuk mengolah data yang dikirim/diterima melalui komunikasi socket?

Pada umumnya, aplikasi socket client/server memang menggunakan database pada sisi server, tetapi jika aplikasi socket mengharuskan sisi client menggunakan database tertentu, maka akan membatasi penggunaan aplikasi itu sendiri.

Selain itu, kegunaan komunikasi socket adalah agar dapat berjalan lintas platform. Tidak peduli operating system apa yang digunakan pengguna aplikasi, komunikasi socket tetap berjalan selama digunakan protokol yang sama.

Sebenarnya jika Anda melihat software database seperti SQL Server, intinya juga merupakan aplikasi socket, di mana menggunakan port tertentu sebagai jalur komunikasi, tetapi software tersebut telah dikemas menjadi produk database yang spesifik.

Tools Tambahan

Aplikasi socket merupakan aplikasi jaringan dan jika Anda mendalami seluk-beluk jaringan, tentu akan familiar dengan tools tambahan yang umumnya digunakan dalam jaringan. Tools ini kemungkinan dapat berguna untuk diimplementasikan ke dalam aplikasi socket Anda.

Tools yang dimaksud, antara lain:

1. Ping.

Ping digunakan untuk memeriksa keberadaan remote host dengan jalan mengirimkan sinyal kepada remote host. Keberadaan remote host dapat ditentukan dengan melihat response yang diterima. Ping juga dapat digunakan untuk mengukur kecepatan transfer data. Salah satu contoh penggunaan ping dalam aplikasi socket adalah memeriksa server yang tersedia sebelum mengirimkan data (dengan asumsi tersedia lebih dari 1 server).

2. Telnet.

Telnet merupakan singkatan dari TELecommunication NET-work. Umumnya istilah telnet saat ini merujuk pada aplikasi telnet client yang tersedia pada kebanyakan operating sys-tem. Telnet mengizinkan Anda mengakses remote host dan menggunakan service-nya. Sebagai contoh, Anda dapat mengirimkan e-mail melalui telnet yang menggunakan port 25 (service SMTP) pada remote host tertentu. Jika Anda telah masuk ke dalam environment telnet, command line yang digunakan adalah command berbasis Unix/Linux. Aplikasi socket dapat dimodifi kasi bekerja seperti telnet dengan mengakses remote host dan port tertentu. Di dalam aplikasi socket, Anda dapat mengambil dan mengolah response yang didapat dari remote host.

3. Netstat.

Netstat menampilkan status jaringan yang terjadi. Dapat menampilkan port yang sedang terkoneksi, atau dalam kondisi menunggu/listening, juga menampilkan protokol yang digunakan, apakah TCP atau UDP. Dengan netstat, Anda dapat mengetahui koneksi jaringan yang terjadi, hal ini dapat dimanfaatkan di dalam aplikasi socket, misalnya untuk melihat port yang sedang aktif dan digunakan.

Ada kalanya Anda perlu menjalankan tools jaringan yang telah disebutkan di atas melalui aplikasi Anda. Untuk keperluan ini, Anda dapat menggunakan shell command yang disediakan oleh bahasa pemrograman yang Anda gunakan.

Misalnya pada Visual Basic, dapat digunakan perintah Shell diikuti parameter yang diperlukan.

Jika ingin mengolah response yang dihasilkan oleh tools tertentu, Anda dapat menuliskan hasilnya pada sebuah file teks, contohnya jika Anda menjalankan perintah netstat –an > hasil.txt pada Command Prompt Windows, maka informasi mengenai koneksi yang aktif akan tersimpan dalam file hasil. txt, di mana Anda dapat mengolah file hasil.txt tersebut lebih lanjut di dalam aplikasi Anda.

Keamanan Jaringan

Berbicara mengenai komunikasi jaringan, ternyata erat kaitannya dengan keamanan jaringan. Port yang terbuka dengan keluar masuknya data, sebenarnya juga merupakan celah keamanan yang dapat dimanfaatkan pihak-pihak tertentu yang berniat buruk.

Karena itu, saat mengembangkan sebuah aplikasi socket, Anda juga perlu mempertimbangkan issue keamanan jaringan dan sistem komputer Anda. Jika data yang dikirimkan merupakan data yang sensitif dan rahasia, Anda dapat melakukan enkripsi data ataupun tindak pengamanan lainnya.

Dari sisi pengguna, saat menggunakan sebuah aplikasi socket, berarti Anda telah mengizinkan aplikasi tersebut untuk melakukan pengiriman dan penerimaan data melalui port tertentu. Karena itu pastikan Anda mengenal dengan baik aplikasi socket yang Anda gunakan, yakinkan bahwa aplikasi tersebut tidak mengandung program jahat yang dapat membahayakan keamanan komputer Anda.

Tetapi jika aplikasi instant messenger dan game online tidak diizinkan oleh administrator jaringan di kantor Anda, jangan lantas mengira pimpinan Anda sangat peduli dengan keamanan jaringan. Hal tersebut untuk mencegah kantor Anda menjadi game center dan ruang gosip!

LEBIH LANJUT

http://en.wikipedia.org/wiki/Internet_socket

http://en.wikipedia.org/wiki/Winsock

Access Point, ethernet adapter, gateway, dan universal repeater dalam saku Anda!

Ukuran yang Ringkas Agar Mudah Dibawa-bawa

ASUS WL-330gE sangat mungil dengan ukuran hanya 8,5×6 x1,7 cm dengan berat hanya 2,2 ons. Ukurannya yang mungil ini membuatnya mudah dibawa dan digunakan dalam situasi apapun sehingga membuat ASUS WL-330gE ini sangat istimewa. Dengan kemudahan untuk dibawa ke mana saja, WL-330gE dapat menyediakan akses wireless ke Internet dengan mudah dan ringkas.

Beragam Fungsi

Untuk menggunakan WL-330gE dalam mode AP atau Gateway, Anda cukup menyambungkannya ke port Ethernet pada modem atau koneksi LAN dan WL-330gE sudah siap digunakan. Selain itu, WL-330gE dapat menyediakan eksibilitas yang superior dalam membangun jaringan wireless dengan dukungan NAT dan DHCP server yang  memungkinkan internet sharing.

Dengan “mode  hot spot” pada WL-330gE dalam mode Gateway, tidak hanya laptop Anda yang dapat mengakses Internet, tapi perangkat WiFi lainnya milik Anda (atau teman Anda), seperti PDA, PSP atau telepon WiFi juga dapat meng-aksesnya tanpa biaya tambahan.

Setup yang Mudah

Hadirnya tampilan setup yang mudah membuat Anda hanya perlu melakukan beberapa klik untuk men-setting koneksi internet wireless. Anda hanya perlu menemukan WL-330gE menggunakan “Device Discovery”, lalu klik pada “Con gure”, kemudian pilih mode yang diperlukan, dan WL-330gE siap digunakan. Dengan fungsi Plug´ n´ Play tanpa driver, hubungkan WL-330gE dengan router/modem, dan WL-330gE siap digunakan.

BAGIAN 1 DARI 2 ARTIKEL

SMS (SHORT MESSAGE SERVICE) bukan hal baru pada teknologimobile, tetapi penggunaannya seolah sudah menjadi  bagian tak terpisahkan dari kehidupan masyarakat kota.

Tidak surut oleh kemajuan teknologi mobile seperti EMS, MMS, ringtone, gambar, ataupun video conference, cara bertukar informasi ala SMS dengan menggunakan teks sederhana masih tetap menjadi pilihan utama.

Tidak terbatas hanya untuk sarana komunikasi pengganti percakapan lisan di antara dua orang, SMS saat ini juga ramai digunakan untuk voting, kuis, lelang, banking, order barang, promosi, undangan, dan masih banyak lagi.

Apa Kelebihan SMS?

SMS dapat menjadi popular tentunya karena memiliki kelebihan, dan kelebihan SMS justru terletak pada kesederhanaannya, sehingga mudah diaplikasikan.

Semua ponsel memiliki tur SMS, tidak peduli apakah ponsel tersebut mendukung 3G dengan fasilitas touch screen ataupun ponsel tempo dulu yang hanya memiliki satu baris layar sederhana seperti kalkulator. SMS juga tetap dapat dikirim walaupun ponsel penerima tidak dalam keadaan aktif dalam limit waktu tertentu, karena SMS memiliki validity period.

Penyampaian SMS umumnya juga cepat dan tidak mengganggu. Biaya yang relatif murah juga menjadi salah satu alasan mengapa SMS digunakan secara luas.

SMS Gateway

SMS gateway merupakan sistem aplikasi untuk mengirim dan/atau menerima SMS, terutama digunakan dalam aplikasi bisnis, baik untuk kepentingan promosi, servis kepada kustomer, pengadaan content produk atau jasa, dan seterusnya.

Karena merupakan sebuah aplikasi, maka tur-tur  yang terdapat di dalam SMS gateway dapat dimodi kasi  sesuai dengan kebutuhan.

Beberapa tur yang umum dikembangkan dalam aplikasi SMS gateway adalah:

1. Auto-reply.

SMS gateway secara otomatis akan membalas SMS yang masuk. Contohnya untuk keperluan permintaan informasi tertentu (misalnya kurs mata uang atau jadwal perjalanan), di mana pengirim mengirimkan SMS dengan format tertentu yang dikenali aplikasi, kemudian aplikasi dapat melakukan auto-reply dengan membalas SMS tersebut, berisi informasi yang dibutuhkan.

2. Pengiriman massal.

Disebut juga dengan istilah SMS broadcast, bertujuan untuk mengirimkan SMS ke banyak tujuan sekaligus. Misalnya, untuk informasi produk terbaru kepada pelanggan.3. Pengiriman terjadwal.

Sebuah SMS dapat diatur untuk dikirimkan ke tujuan secara otomatis pada waktu tertentu. Contohnya untuk keperluan mengucapkan selamat ulang tahun.

Untuk membuat sebuah SMS gateway, Anda perlu mengenal hal-hal yang berhubungan dengan SMS gateway itu sendiri.

Salah satu hal yang memegang peranan penting dalam pengiriman SMS adalah SMSC (Short Message Service Center), yang merupakan jaringan telepon selular yang menangani pengiriman SMS.

Jadi, pada saat seseorang mengirimkan sebuah pesan SMS melalui ponselnya, SMSC-lah yang bertugas mengirimkan pesan tersebut ke nomor tujuan.

Jika nomor tujuan tidak aktif, maka SMSC akan menyimpan pesan tersebut dalam jangka waktu tertentu. Jika SMS tetap tidak dapat terkirim sampai jangka waktu tersebut berakhir, maka SMS tersebut akan dihapus dari penyimpanan SMSC.

Sebuah aplikasi SMS gateway dapat menggunakan jalur SMSC untuk pengoperasiannya. Keuntungannya adalah penggunaan nomor pendek yang mungkin dapat terdiri dari 3 atau 4 digit saja, misalnya 222, 9090, dan seterusnya.

Contohnya seperti saat Anda mengikuti polling SMS Indonesian Idol, nomor pendek ini disediakan oleh operator jaringan SMSC.

Jalur SMSC juga dapat mengirim SMS dalam jumlah banyak dalam waktu yang relatif singkat.

Hanya saja, untuk membuat SMS gateway dengan menggunakan jalur SMSC, Anda harus memiliki jalur koneksi ke operator selular, dan ini bukan hal yang mudah untuk pelaku bisnis dalam skala kecil ataupun individu.

Umumnya layanan ini digunakan jika aplikasi Anda dapat menghasilkan lalu lintas SMS yang tinggi.

Terdapat alternatif infrastruktur yang lebih sederhana dan mudah didapatkan, yaitu membuat SMS gateway yang menggunakan ponsel ataupun modem GSM/CDMA sebagai media pengirim/penerima SMS, di mana ponsel atau modem GSM/CDMA tersebut terpasang pada sebuah komputer.

Tentu saja SMS tersebut sebenarnya tetap terkirim melalui SMSC, hanya saja melalui rute yang lebih panjang karena tidak memiliki koneksi langsung ke SMSC. Karena itu, kapasitas dan kecepatan pengirimannya tidak sebaik performa jika langsung menggunakan jalur SMSC.

Karena relatif lebih mudah untuk diimplementasikan, SMS gateway dengan menggunakan ponsel atau GSM/CDMA modem cukup berkembang dan banyak digunakan.

Lalu apa perbedaannya jika menggunakan ponsel, modem GSM, atau modem CDMA? Apa pilihan terbaik? Sangat tergantung pada kebutuhan Anda sendiri, modem GSM/CDMA memang di desain bekerja untuk keperluan SMS gateway, memiliki performa yang baik, dan stabil dibandingkan dengan ponsel biasa.

Tetapi, penggunaan ponsel untuk keperluan SMS gateway juga dapat dipertimbangkan jika sistem SMS gateway yang digunakan tidak terlalu berat dan masih dapat ditangani melalui ponsel.

Sedangkan modem GSM atau modem CDMA, sesuai dengan namanya, dibedakan oleh jaringannya, apakah menggunakan GSM atau CDMA. Untuk saat ini, modem GSM lebih banyak digunakan karena jaringan GSM yang lebih stabil.

Modem CDMA tetap merupakan alternatif menarik yang mungkin berguna untuk kondisi tertentu. Misalnya jika Anda memiliki perhitungan biaya pulsa yang lebih murah, atau kalangan penerima SMS dari sistem SMS gateway Anda mayoritas menggunakan ponsel CDMA.

Cara kerja modem GSM/CDMA mirip dengan modem dialup yang biasa Anda gunakan untuk koneksi Internet melalui line telepon.

Perbedaannya adalah modem dial-up mengirim dan menerima data melalui line telpon, sedangkan modem GSM/CDMA mengirim dan menerima data melalui gelombang radio.

Library SMS Gateway

Kita akan membahas lebih lanjut mengenai konsep pembuatan SMS gateway, dengan menggunakan ponsel atau modem GSM.

Inti dari sebuah SMS gateway adalah mesin atau engine pengiriman dan penerima SMS, sehingga developer dapat menggunakan function-function yang telah disediakan engine tersebut dan menyesuaikannya dengan kebutuhan dan database.

Salah satu komponen ActiveX yang dapat digunakan untuk keperluan SMS gateway adalah FBUS yang dapat digunakan oleh programer Visual Basic ataupun bahasa pemrograman lain yang mendukung control ActiveX.

Yang paling menarik adalah untuk versi FBUS Lite dapat didownload secara gratis. Pada saat ini tidak mudah mendapatkan komponen SMS gateway yang gratis dan berkualitas, terutama untuk platform Windows.

FBUS kompatibel dengan kebanyakan ponsel Nokia, dengan panduan contoh program demo yang ikut disertakan dalam paket download-nya dan referensi dari website, Anda dapat mengembangkan sebuah SMS gateway sederhana.

Library/komponen lain yang dapat Anda pergunakan adalah Boomerang GSM yang dibuat dengan bahasa pemrograman Delphi, tetapi juga disediakan library ActiveX yang dapat digunakan oleh Visual Basic.

Untuk versi Lite juga dapat diperoleh secara gratis, walaupun Anda memerlukan registrasi melalui website Boomerang pada saat menggunakannya di komputer Anda.

Library ini cukup dapat diandalkan dan kompatibel dengan cukup banyak jenis ponsel maupun modem GSM.

Untuk library atau  software SMS gateway komersial, Anda tidak akan mengalami kesulitan mencarinya melalui Internet, terdapat banyak sekali pilihan yang tersedia. Misalnya Oxygen, WinSMS, Ozeki, dan masih banyak lagi.

Untuk lingkungan platform keluarga Linux, salah satu pilihan yang populer adalah Kannel. Selain SMS gateway, Kannel juga merupakan WAP gateway. Pilihan popular lainnya dalam lingkungan Linux adalah Gnokii.

MSComm dan AT Command

Anda juga dapat membuat sendiri library/komponen SMS gateway, dengan menggunakan control/komponen standar yang ada pada bahasa pemrograman seperti Visual Basic atau Delphi. Control/komponen yang dimaksud adalah MSComm.

MSComm menyediakan komunikasi data melalui serial port (juga mendukung USB dan  infrared) dari aplikasi Anda. Sehingga Anda dapat berkomunikasi dengan ponsel atau modem GSM yang terpasang pada serial port komputer Anda.

Bahasa yang dikenali oleh ponsel/modem GSM disebut dengan AT command. AT merupakan kependekan dari Attention.

AT command dapat digunakan antara lain untuk menginstruksikan perintah-perintah sebagai berikut:

1. Mengirim dan menerima pesan SMS atau faks.

2. Mendapatkan informasi mengenai device, misalnya nama manufaktur, nomor IMEI, dan lain-lain.

3. Mendapatkan status device, misalnya status aktivitas, status registrasi network, kekuatan sinyal, ataupun status baterai.

4.  Penulisan dan pencarian phonebook.

5. Dari sisi keamanan, Anda dapat mengaktifkan fasilitas lock dan mengubah password.

6. Menyimpan dan mengembalikan kon gurasi.

Tidak semua device mengimplementasikan seluruh AT command, pada umumnya modem GSM lebih mendukung banyak AT command dibandingkan ponsel biasa.

Dengan AT command, Anda juga dapat mengirim SMS melalui GPRS jika modem atau ponsel Anda mendukung tur GPRS.

Untuk mencoba AT command melalui komputer Anda, Anda dapat menggunakan HyperTerminal yang disediakan oleh Microsoft Windows yang terletak pada menu All Programs

– Accessories, Communications – HyperTerminal.

Pastikan Anda telah menginstal driver yang diperlukan agar operating system mengenali device yang Anda gunakan, lalu Anda dapat memasukkan kartu GSM pada ponsel atau modem GSM. Koneksikan pada port komputer, pastikan computer Anda telah mengenalinya, lalu Anda dapat memanggil program HyperTerminal.

Untuk melakukan tes koneksi dengan ponsel/modem GSM, cukup ketikkan perintah AT diikuti dengan penekanan tombol enter, yang akan direspon dengan OK jika tidak terdapat masalah.

Berikut adalah contoh rentetan AT command untuk mengirimkan SMS:

AT

AT+CMGF=1

AT+CMGS=08xxxxxxx

> testing kirim

Perintah AT+CMGF=1 memberikan instruksi untuk beroperasi pada format text (akan dijelaskan kemudian), AT+CMGS= diikuti dengan nomor ponsel tujuan, sedangkan tulisan “testing kirim” merupakan isi pesan yang ingin dikirim.

Setiap baris pada contoh perintah di atas diakhiri dengan penekanan tombol enter, kecuali untuk baris pengirisan pesan, yang diakhiri dengan CTRL + Z.

AT command umumnya ditulis dengan huruf besar, tetapi banyak modem GSM dan ponsel yang mengizinkan penulisan AT command dalam huruf besar maupun huruf kecil.

Setelah berhasil menjalankan AT command pada HyperTerminal, maka Anda telah siap untuk melangkah lebih lanjut, yaitu menuliskan kode program pada bahasa pemrograman favorit Anda untuk membangun sebuah SMS gateway.

Kode program yang membangun SMS gateway pada intinya menuliskan AT command di dalam aplikasi Anda, sebagaimana yang dilakukan dalam HyperTerminal.

Tentunya, peranan AT command sangat penting jika Anda  mengembangkan sendiri aplikasi SMS gateway. Untuk memudahkan pemahaman, Anda dapat mengategorikan AT command ke dalam beberapa kategori.

AT COMMAND YANG BERSIFAT UMUM

AT COMMAND  FUNGSI

AT+CGMI  Mengambil informasi manufaktur

AT+CGMM  Mengambil informasi model

AT+CGMR  Mengambil informasi revisi

AT+CGSN  Mengambil informasi serial number device

AT+CSCS  Memilih set karakter

AT COMMAND UNTUK KONTROL

AT COMMAND  FUNGSI

ATD Melakukan dial

ATH  Hang up panggilan yang masuk

ATA  Menjawab panggilan yang masuk

AT COMMAND UNTUK LAYANAN JARINGAN

AT COMMAND  FUNGSI

AT+CNUM Nomor subscriber

AT+CREG Registrasi jaringan

AT+COPS Pemilihan operator

AT+CLCK Fasilitas lock

AT+CPWD Penggantian password

AT+CCWA Call waiting

AT COMMAND UNTUK SMS

AT COMMAND  FUNGSI

AT+CPMS  Menentukan penyimpanan pesan

AT+CMGF Format pesan

AT+CSCA  Nomor service center

AT+CNMI  Pengaktifan indikasi pesan baru

AT+CMGL Daftar pesan

AT+CMGR Membaca pesan

AT+CMGS Mengirim pesan

AT+CMGD Menghapus pesan

AT+CMMS  Mengirimkan lebih banyak pesan

+CMTI  Noti kasi delivery pesan

+CDSI  Noti kasi status report

Masih banyak lagi AT command yang tersedia, akan sangat bagus jika Anda memiliki dokumentasi AT command yang didukung oleh device yang Anda gunakan, sehingga Anda dapat memaksimalkan kemampuan device yang digunakan pada SMS gateway Anda.

Untuk AT command yang berawalan dengan AT (misalnya: AT+CMGS, AT+CMGD) diketikkan dengan diikuti parameter-parameter yang dibutuhkan, sedangkan command tanpa awalan

AT (seperti +CMTI,+CDSI) merupakan result yang dikeluarkan oleh device.

Jika Anda tidak memiliki dokumentasi yang cukup mengenai AT command yang didukung oleh device yang digunakan, Anda dapat mencoba AT command tersebut melalui HyperTerminal.

HyperTerminal akan mengembalikan pesan kesalahan jika ATcommand yang Anda ketikkan tidak dimengerti oleh device. Saat sebuah AT command tidak menampilkan pesan kesalahan, Anda perlu mencoba lebih jauh dengan mengetikkan parameter-parameter yang mungkin digunakan dalam aplikasi.

Hal ini penting mengingat AT command juga bisa berbeda parameter antara device satu dengan device lainnya.

Terdapat dua tipe AT command, yaitu basic command dan extended command. Basic command adalah AT command yang tidak menggunakan tanda +, misalnya ATD, ATH, dan ATA.

Sebaliknya, AT command yang menggunakan tanda + merupakan extended command. Setiap extended command memiliki parameter/perintah test yaitu =?, yang akan mengembalikan informasi mengenai command tersebut.

Contohnya Anda dapat mengetikkan AT+CMGF=?, AT+CMGI=?, dan seterusnya.

Format PDU dan Text

Format SMS yang digunakan oleh ponsel/modem GSM adalah format PDU (Protocol Description Unit), tetapi pada contoh di atas dengan menggunakan HyperTerminal, Anda menggunakan format ASCII text, yang memang lebih mudah digunakan.

Tetapi proses yang terjadi adalah format ASCII text yang Anda ketikkan akan di-convert ke dalam format PDU, pada saat SMS diterima nomor tujuan, ponsel/modem GSM akan mengubah kembali SMS format PDU tersebut menjadi format ASCII text agar dapat terbaca dengan mudah oleh pengguna.

Anda telah mencoba mengirimkan SMS melalui AT command dengan  format text, cukup mudah bukan? Jika  berhasil melakukannya, Anda perlu berterima kasih pada ponsel  atau modem GSM Anda, karena device yang Anda gunakan mendukung format text, yang diaktifkan melalui perintah AT+CMGF=1.

Tetapi tidak semua device mendukung format text, untuk  device yang hanya mendukung format PDU, Anda harus mengirimkan SMS dalam format PDU.

Format PDU dituliskan dengan heksadesimal, terbagi atas 8 header, yaitu:

1. Nomor SMS Center.

Terdiri lagi dari 3 subheader yang memiliki aturan sendiri, sebagai contoh SMS Center Telkomsel dengan format text biasa adalah 0811000000, tetapi di dalam format PDU dituliskan menjadi 06818011000000. Contoh lain SMS Center Indosat-M3 adalah 0855000000 dalam format text, dituliskan menjadi 06818055000000 dalam format PDU.

2. Tipe SMS.

3. Nomor Referensi SMS.

4. Nomor Ponsel Penerima, dengan cara penulisan yang mirip dengan header 1, yaitu pengisian nomor SMS Center.

5. Bentuk SMS.

6.  Skema Encoding Data I/O.

7.  Jangka Waktu Sebelum Expired.

8.  Isi SMS, terbagi lagi menjadi dua subheader dan isi pesan dalam heksadesimal.

Delapan header ini kemudian digabungkan menjadi sebuah paket PDU yang lengkap. Jika menggunakan format PDU, Anda memerlukan function/tools yang dapat membantu Anda melakukan konversi format PDU ke text dan sebaliknya.

Persiapan Development

Anda dapat memilih bahasa pemrograman yang disukai untuk mengembangkan aplikasi SMS gateway. Selama bahasa pemrograman tersebut mendukung komunikasi device dengan menggunakan AT command, maka Anda dapat membangun SMS gateway dengan menggunakan bahasa pemrograman tersebut.

Pada kesempatan mendatang, kita akan mempelajari konsep pembuatan beberapa tur standar SMS gateway dengan menggunakan komponen MSComm dan bahasa pemrograman Visual Basic.

Hal lain yang perlu dipersiapkan adalah database. Anda dapat menyusun tabel-tabel dalam database sebagaimana layaknya SMS dikirim dan disimpan pada ponsel Anda, di mana terdapat tabel Inbox untuk menerima SMS, table Outbox untuk mengirim SMS, dan table Sent Items untuk SMS yang telah terkirim.

Sampai bertemu kembali dalam artikel selanjutnya, dengan pembahasan yang lebih mendalam mengenai SMS gateway.

LEBIH LANJUT

http://en.wikipedia.org/wiki/Short_message_service

http://en.wikipedia.org/wiki/SMS_gateway

Bagi level management atau bagian eksekutif suatu perusahaan bisnis, mungkin bagian terpenting dari sebuah aplikasi adalah seberapa jauh laporan dapat dihasilkan oleh aplikasi tersebut. Joko Nurjadi

APAKAH SEDEMIKIAN PENTING  arti sebuah laporan? Sementara mungkin Anda sendiri pernah melihat bagaimana lembar-lembar laporan yang dihasilkan oleh aplikasi ternyata hanya dilihat sesaat, untuk kemudian dibiarkan bertumpuk di atas meja ataupun menjadi penghuni tong sampah.

Tentu menyakitkan jika semua itu terjadi di depan mata Anda, lebih menyakitkan lagi jika Anda adalah developer aplikasi yang membuat laporan tersebut!

Di balik semua itu (jika benar cerita di atas pernah terjadi pada Anda), percayalah bahwa laporan memiliki peranan yang sangat penting, kerja keras Anda tidaklah sia-sia.

Bayangkan dari mana level management perusahaan mengambil keputusan untuk menambah produksi, memberikan diskon khusus, dan berbagai kebijakan lainnya?

Tentunya segala macam kebijakan tersebut berasal dari analisis, yang didukung oleh fakta di dalam laporan yang dihasilkan.

Laporan dan Kendalanya

Jika Anda seorang developer, apakah setuju jika dikatakan bahwa laporan bisa jadi merupakan salah satu modul tersulit di dalam pengembangan aplikasi?

Pada umumnya, jika Anda mengembangkan aplikasi dari awal, maka laporan menempati jatah terakhir untuk di-develop, karena laporan sangat tergantung pada bisnis proses yang terjadi, sehingga Anda harus terlebih dahulu menyelesaikan bagian proses data sesuai dengan alur operasional yang berlaku.

Jika Anda telah membuat modul laporan dan ternyata terdapat perubahan alur proses, maka bersiaplah melakukan modikasi pada laporan, yang sering kali terkena imbas perubahan.

Bahkan tanpa ada perubahan proses pun, bisa saja Anda harus  tetap mengubah laporan karena pimpinan atau pengguna aplikasi menginginkan kustomisasi laporan, ataupun menginginkan format dan jenis laporan yang berbeda.

Sering kali juga terjadi, aplikasi-aplikasi yang digunakan pada sebuah perusahaan tidaklah berasal dari sumber yang sama, bisa jadi masing-masing menggunakan database yang berbeda, dan menghasilkan laporan yang berbeda-beda pula dari aplikasinya masing-masing.

Jika Anda tidak memiliki source code aplikasi yang menghasilkan laporan tersebut, dengan sangat terpaksa Anda mungkin harus menerima tantangan membuat aplikasi baru dari awal yang dapat menghasilkan laporan serupa.

Belum lagi saat sebuah software aplikasi mengalami saatnya untuk dilakukan  life cycle, di mana modul yang mengalami daur ulang termasuk dengan laporan-laporannya, dan bagaimana jika jumlah laporan tersebut mencapai puluhan atau bahkan sampai ratusan laporan?

Mungkin semua permasalahan itu akhirnya tiba sampai pada puncaknya, di mana Anda mengharapkan teknologi software telah mampu menciptakan sebuah wizard yang langsung terkoneksi pada otak, dapat menampilkan laporan sesuai dengan yang dipikirkan oleh pimpinan Anda di dalam hitungan detik, dan langsung tercetak rapi.

Tetapi karena hal itu tidak mungkin terjadi (sekalipun terjadi, itu berarti menandai terbitnya surat pemecatan seluruh developer karena sudah tidak diperlukan lagi), maka untuk mengatasi permasalahan eksibilitas, integrasi, dan perulangan pekerjaan pada modul laporan di atas, Anda memerlukan sebuah tool.Bagaimana jika tool itu bernama Reporting Services?

Business Intelligence

Untuk memahami Reporting Services, terlebih dahulu kita harus mengenal apa yang disebut dengan Business Intelligence (BI). BI menjelaskan kumpulan konsep dan metode untuk membantu keputusan bisnis, dalam hal ini BI mengumpulkan, mengintegrasikan, menganalisis, dan menampilkan informasi bisnis tersebut.

Pengguna BI tidak hanya diarahkan pada level management atau analis, tetapi juga karyawan pada umumnya, artinya pengguna BI dapat berada pada semua level pada organisasi perusahaan.

Hal ini tidak berarti data yang condential bebas dilihat oleh siapapun di dalam perusahaan, tetapi data tersedia sesuai dengan level dan tanggung jawab pekerjaan masing-masing.

Strategi ini membuat masing-masing bagian dapat menghasilkan laporan bagi kepentingan dirinya sendiri. Bayangkan bagian marketing mampu menghasilkan sendiri laporan penjualan dan bonus yang dibutuhkannya, lalu bagian HRD dengan mudah menghasilkan laporan karyawan sesuai format yang diinginkan.

Semua pelaporan ini dapat dilakukan oleh Reporting Services, yang merupakan salah satu services yang mendukung Business Intelligence, berintegrasi dengan services lain seperti Anaylsis Services dan Integration Services.

Pembahasan artikel ini akan lebih terfokus pada Reporting Services.

Reporting Services

Bagi pengguna Microsoft SQL Server, Reporting Services bukan merupakan hal baru, karena telah ada sejak Microsoft merilis SQL Server 2000, walaupun dulu masih berupa add-on yang terpisah, sedangkan kini sudah terdapat di dalam SQL Server 2005.

Di dalam SQL Server 2005, tidak terdapat perubahan signikan pada Reporting Services, tetapi tentu saja terdapat tur dan dukungan tambahan pada report design, dan mendukung integritas yang lebih baik.

Komponen Reporting Services dibedakan menjadi dua, yaitu komponen server dan komponen client. Komponen server terbagi menjadi tiga layer, yaitu:

1. Report Server.

Berada pada server layer, terdiri dari programming interface, report processor, data processing extension, rendering extension, scheduling & delivery processor, dan delivery extension.

2. Report Manager.

Berada pada application layer, berfungsi untuk menampilkan laporan dan tools administrasi berbasis web.

3. Report Server Database.

Berada pada data layer. Database ReportServer menyimpan seluruh data yang dibutuhkan oleh Reporting Services, seperti metadata statik, termasuk di dalamnya adalah report denition, data source, user, policy, role, dan report snapshot.

Sedangkan, data sementara seperti session data dan cache report disimpan pada database ReportServer TempDB.

Komponen client terbagi menjadi:

1. Report Designer.

Dapat digunakan oleh baik oleh developer ataupun nondeveloper untuk menciptakan  laporan.

Seperti yang telah dijelaskan di atas, strategi Business Intelligence mengaplikasikan pembuatan laporan pada seluruh level organisasi yang membutuhkannya, fungsi-fungsi laporan standar seperti grouping, sorting, format report, sudah bukan rahasia developer lagi.

Walaupun demikian, developer tetap diperlukan untuk pembuatan laporan yang lebih kompleks, karena itu Report Designer mendukung VB.NET sehingga developer dapat melakukan pemrograman lebih jauh dalam pembuatan laporan.

Untuk metode pembuatan report yang lebih sederhana lagi, Anda dapat menggunakan Report Builder, sebuah aplikasi client-side untuk menciptakan  adhoc report atau laporan yang diciptakan on the y.

Penggunaan Report Builder cukup user friendly. Walaupun tidak menyertakan seluruh fungsi yang terdapat dalam IDE Visual Studio (yang memang tidak semua fungsi diperlukan untuk pembuatan laporan standard), di dalam Report Builder pengguna dapat memilih data dan mendesain laporan tanpa perlu mengetahui dimana data tersimpan.

Tentunya juga Anda tidak perlu mengetahui bahasa pemrograman yang kompleks. Satu-satunya yang diperlukan adalah kebiasaan untuk menggunakan bisnis model data Anda.

2. Web Browser.

Untuk menampilkan laporan yang terletak pada web server, Anda cukup mengarahkan web browser Anda untuk mengakses laporan yang terpusat pada web server.

3. Tools 3rd-Party.

Satu hal yang menarik pada Reporting Services adalah laporan ditampilkan dalam bentuk web based, di mana laporan secara erpusat disimpan pada web server dan berjalan pada Microsoft NET Framework.

Integrasi tidak lagi menjadi permasalahan, justru terbuka pengembangan yang sangat luas dengan dukungan standar eknologi seperti HTTP, SOAP, dan WSDL. Dalam hal ini, Anda idak lagi melihat Reporting Services sebagai sebuah tools untuk menghasilkan laporan, tetapi lebih merupakan sebuah eporting platform.

Walaupun konsep yang dibawa Reporting Services berbeda dengan software pembuatan report lain yang umum digunakan seperti Crystal Report atau Microsoft Access. Tetapi bagi Anda  yang terbiasa menggunakan Crystal Report/Microsoft Access,  tampaknya akan mudah beradaptasi dengan pembuatan lapor- an pada Reporting Services dengan dukungan Report Designer  yang juga menggunakan drag & drop object.

Sesuai dengan namanya, Reporting Services khusus menangani laporan. Sehingga laporan terpisah dari software yang  menangani pekerjaan operasional, hal ini menyebabkan laporan  tidak tergantung lagi dengan software tertentu, walaupun bisa  jadi mengambil data source yang sama.

Reporting Services mampu menggunakan data source yang beragam, seperti OLE DB, Oracle, Open Database Connectivity (ODBC), sehingga tidak menjadi masalah jika Anda menggunakan database Oracle misalnya, dan ingin menampilkannya dalam Reporting Services, walaupun SQL Server tetap digunakan sebagai repository untuk menyimpan metadata report.

Reporting Services mendukung life cycle pelaporan sebagai  berikut:

1. Report Authoring.

Developer dapat menciptakan laporan untuk dipublikasikan  oleh report server dengan menggunakan standar format  RDL.

2. Report Management.

Denisi laporan, beserta folder dan resources yang dipub likasikan dan diatur sebagai web services.

3. Report Delivery.

Penyajian laporan mendukung on-demand (pull) dan pushsubscription (event based). Pengguna dapat melihat laporan di dalam web atau e-mail.

4. Report Security.

Reporting Services mengimplementasikan model  security yang melindungi laporan dan resource.

Langkah-langkah life cycle di atas dapat diaplikasikan dengan skenario sebagai berikut: Anda memulai project baru dari Visual Studio dengan memilih tipe project dengan Business Intelligence Projects, memilih template Report Server Project memberi nama project baru Anda, yang selanjutnya akan tampil pada Solution Explorer.

Langkah selanjutnya adalah menentukan data source yang ingin Anda gunakan dengan cara mengklik kanan folder Shared Data Sources pada Solution Explorer.

Menambahkan object report pada Business Intelligence sama mudahnya dengan menambahkan object lainnya bagi Anda yang telah familiar dengan tampilan IDE Visual Studio.

Report telah dilengkapi dengan wizard yang mengizinkan Anda menentukan query, memilih  layout, dan menyimpan laporan Anda dalam format RDL (Report De nition Language).

Laporan-laporan yang dihasilkan dapat dikelola lebih lanjut dengan menggunakan Report Manager, mencakup tingkat keamanan, property, jadwal dan lain-lain.

Setelah laporan berhasil dibuat, maka selanjutnya adalah cara penyajiannya, atau masuk ke dalam tahap delivery. Pengguna dapat memilih dan melihat langsung laporan yang diinginkannya (on-demand), ataupun dengan menggunakan cara push subscription.

Push subscription berarti laporan tersebut secara otomatis akan dibuat dan dikirimkan ke tempat tujuan.

Setelah laporan tersaji, pengguna dapat mengubah bentuknya kedalam format lain seperti PDF, Microsoft Excel, TIFF (dan format gambar lainnya), XML, serta masih banyak lagi.

Kemudahan dan Tantangan

Jika Anda melakukan migrasi pelaporan dari cara konvensional menjadi Reporting Services, tentu saja Anda mengharapkan akan mempermudah pekerjaan dan meningkatkan performa.

Tetapi, tidak ada hal yang langsung dapat berjalan mulus tanpa usaha yang mendukungnya. Implementasi Reporting Services juga merupakan tantangan, membawa suatu paradigma dan perubahan baru, terlebih bagi mereka yang merasa bahwa tidak ada yang salah dengan cara yang lama.

Mungkin memang tidak ada yang salah dengan cara terdahulu, tetapi selalu ada cara yang lebih baik, dan Anda tidak akan mengetahuinya sebelum memahami dan mulai menggunakannya.

Tentunya hal ini juga memerlukan kejelian untuk melihat, apakah proses pelaporan sering menjadi kendala, dan solusi seperti apa yang dapat mengatasinya.

Sebuah teknologi baru, tentunya menawarkan pengembangan yang lebih luas, seperti juga Reporting Services, tidak terbatas untuk pelaporan di dalam satu organisasi saja. Reporting Services dapat memberikan laporan hingga di luar internal perusahaan, misalnya laporan yang dapat diakses oleh kustomer ataupun partner, yang dapat diakses melalui Internet. Menarik, bukan?

LEBIH LANJUT

http://en.wikipedia.org/wiki/SQL_Server_Reporting_Services

http://www.houseoife.net/ssrs01.php?article_id=5

http://www.microsoft.com/sql/technologies/reporting/overview.mspx

Mengatur workstation dari jauh dengan menggunakan teknologi bisa menghemat waktu dan biaya secara signifikan. Berikut adalah beberapa poin untuk memaksimalkan tool dan prosedur pengelolaan Anda. Gunung Sarjono

AKAN SANGAT NYAMAN bagi system administrator jika mereka bisa mengatur perangkat (komputer) dari jauh. Dengan teknologi yang memungkinkan Anda untuk duduk di komputer dan terhubung ke komputer tempat lain. Sebagai contoh, Anda bisa terhubung ke komputer kerja dari komputer rumah dan bisa mengakses ke semua program, le,  resource jaringan, meskipun Anda tidak di depan komputer tempat kerja Anda. Anda bisa meninggalkan program tetap berjalan di kantor dan kemudian, setelah sampai di rumah, Anda bisa melihat desktop komputer kerja Anda dari komputer rumah, dengan program yang sama berjalan.

Kenali Hardware-nya

Anda mungkin merasa inventaris workstation sudah tertanam di pikiran Anda tapi apakah Anda benar-benar mengetahuinya? Untuk mengatur workstation dari jauh Anda harus punya informasi mengenai sistem tersebut, seperti misalnya: Apakah ada USB 2.0? Apakah yang terpasang drive DVD atau CD? Bisakah untuk menulis? Bagaimana kon gurasi urutan boot dan bagaimana Anda menggantinya? Koneksi apa yang digunakan ke back ofce? Mengetahui jawaban dari pertanyaan tersebut akan membuat perbedaan besar dalam mengatur workstation dari jauh.

Identi kasi Client Firewall dan Kongurasi

Jika ada client rewall, pastikan Anda tahu apa yang bisa dan tidak bisa dilakukan. Tentukan di mana dan oleh siapa task bisa dilakukan (dan bagaimana men-disable-nya). Contoh yang bisa dilakukan adalah dengan mencoba men-download le atau update aplikasi dari auto update atau beberapa sumber nonstandar. Meskipun cara ini sederhana, apakah semua sistem bisa mengakses update sesuai dengan yang diharapkan?

Kenali Jaringannya

Banyak perusahaan menerapkan aturan untuk lokasi yang jauh mulai dari membatasi jumlah trafc untuk setiap lokasi,  membatasi trafc dari lokasi, sampai membatasi alamat MAC yang  bisa terhubung ke lokasi tersebut. Supaya bisa melakukan task yang diperlukan untuk mengatur workstation dari jauh, pastikan Anda tahu trafc jaringan yang diperbolehkan. Jika memungkinkan, ketahui juga prosedur atau parameter untuk mengubah trafc yang diperlukan.

Hafal Tool Command-line

Bagi mereka yang koneksi bandwidth-nya kecil, menghafal task administratif dari command line bisa menghemat waktu. Pada  sistem Windows XP, hafalkan perintah berikut: (i) Compmgmt. msc–Computer Management MMC snap-in, berbagai jenis informasi termasuk Event Log, Device Manager, dan Services.

(ii)Ipcong–utilitikongurasi TCP/IP. Beberapa parameter yang biasa digunakan di antaranya /release, /renew, /ushdns, dan /registerdns. (iii) Shutdown.exe–tool untuk me-reboot atau mematikan komputer. Dengan permission yang sesuai, sistem juga bisa di-reboot dari jauh. (iv) Net Use–bisa digunakan untuk memetakan (map) drive, otentikasi, atau menghentikan pemetaan.

Pusatkan dan Satukan Semua Jika Bisa

Jika memungkinkan, kumpulkan semua elemen infrastruktur workstation Anda pada satu tempat. Hal terakhir yang tidak Anda inginkan adalah banyaknya le server kecil yang tersebar di perusahaan Anda. Jadi untuk penyimpanan le, mempunyai resource yang terpusat bagi user cabang (remote) sangatlah penting. Dengan demikian, back-up dan aturan sekuriti akses untuk user cabang sama dengan user pusat. Biaya TI Anda akan lebih rendah dan administrasi dan akses dikontrol dengan satu prosedur, di manapun lokasinya.Namun, harus ada pengecualian untuk cabang dengan banyak user karena mereka bisa memenuhi koneksi antarkedua tempat. Jika Anda mempunyai kantor cabang, dengan misalnya 40 orang di dalamnya, le server lokal akan lebih cocok, dan back-up melalui jaringan dilakukan jika waktu dan traf c memungkinkan. Sebaliknya, jika itu misalnya adalah toko, dengan user kurang dari 10 orang dan hanya sedikit komputer, Anda bisa memusatkan dan menyatukannya.

Ada Distribusi Melalui Internet

Untuk lokasi cabang, langsung saja ke Internet daripada menggunakan VPN atau koneksi wide area. Sebagai contoh, misalkan Anda harus menginstalasi service pack besar untuk operating system cabang. Jika Anda mencari  download sebesar 300 MB, instalasi tidak mungkin dilakukan pada mayoritas koneksi remote. Tool administrasi tertentu bisa mendistribusi paket melalui Internet untuk membantu lokasi yang jauh dan user laptop pada waktu mereka jauh dari jaringan pusat. Sebagai contoh, pada waktu remote workstation (termasuk laptop) hendak menerima paket melalui Internet, iPass bisa menyediakan download yang cepat.

Siapkan Tool Altenatif

Kita semua biasa menggunakan tool yang ada dan kita sukai. Untuk Windows XP, kita biasanya menggunakan Remote Desktop. Namun, pada situasi di mana Anda tidak bisa menggunakan Remote Desktop untuk terhubung ke sistem client, apa yang Anda lakukan? Siapkan tool alternatif untuk mengakses sistem client, jika dibutuhkan.

Beberapa contoh adalah DameWare menawarkan  push install dan remove pada waktu menggunakan otorisasi Windows melalui koneksi TCP/IP. (ii) VNC–remote client. Bisa digunakan sebagai koneksi alternatif dan menjalankan service VNC jika dibutuhkan. (iii) LogMeIn.com–menyediakan banyak bantuan dalam koneksi Internet-ke-client; bisa bekerja pada mayoritas kongurasi proxy.

Pastikan OS Konsisten

Untuk mengatur workstation dari jauh secara efektif tanpa memperbesar biaya, mempunyai satu platform merupakan suatu keharusan. Tidak ada salahnya menunda implementasi platform baru untuk menjaga kekonsistenan administrasi dan support. Jika ada dua platform yang digunakan, setiap platform harus dikerjakan secara tuntas. Oleh karena itu, mempunyai daftar inventaris hardware workstation juga berperan dalam mendapatkan TI yang lebih efisien.

Batasi Ruang Lingkup

Ini memang bukan tindakan yang bersifat teknis, tapi untuk workstation yang jauh, Anda harus menentukan apa yang harus dilakukan sebagai administrator. Misalkan Anda punya sejumlah kantor cabang untuk sejumlah kecil user yang Anda lengkapi dengan perangkat standar. Inventaris perangkat ini meliputi workstation atau laptop, printer laser untuk semua sistem lokal, dan koneksi jaringan untuk ke kantor pusat. Suatu hari, Anda mendapat pertanyaan dari kantor cabang, “Bisakah kami mendapatkan printer yang bisa scan dan faks?”

Ini merupakan isu kritikal karena mereka melewati ruang lingkup yang “biasa” dan mereka akan menderita karena Anda, sebagai administrator, bertanggung jawab untuk driver perangkat tersebut. Anda juga akan menjauh dari platform komputasi yang konsisten. Mempunyai kemampuan untuk scan dan faks bukanlah hal yang buruk—tapi cabang harus mengerti bahwa meminta fungsi di luar yang biasanya membutuhkan biaya dan biayanya bisa lebih dari harga perangkat yang diminta.

Sediakan Support yang Cukup untuk User Cabang

Jangan biarkan user cabang menderita. Dinamika user cabang berbeda dengan user pusat. Bisa saja tidak ada sistem lain yang bisa digunakan, bisa saja tidak langsung ada orang untuk melakukan task bagi mereka, dan bisa saja ada pelanggan yang menunggu. User cabang yang tidak mempunyai staf TI lokal benar-benar sendirian dalam berbagai hal, dan Anda tidak ingin mereka merasakan hal yang sama dalam hal teknologi. Menyediakan layanan yang baik dari sisi administrasi penting bagi kesuksesan pengaturan TI.

LEBIH LANJUT

http://www.dameware.com

http://www.ipass.com

htpp://www.logmein.com

http://www.tightvnc.com

KONEKSI REMOTE KE PC WINDOWS XP DARI WINDOWS VISTA

Microsoft Windows Vista mempunyai beberapa layer sistem sekuriti tambahan dibanding Windows XP. Biasanya, ini merupakan hal bagus. Namun, layer sekuriti tambahan tersebut kadang mengganggu user. Salah satu contoh adalah Remote Desktop. Membuat koneksi remote desktop ke PC yang menjalankan Windows dari PC yang menjalankan Vista tidak mudah karena ada beberapa hal yang tidak bisa dilakukan pada waktu konfi gurasi.

Melakukan koneksi remote dari PC Vista di rumah ke komputer Windows XP di kantor  menjadi semakin biasa karena user rumahan membeli PC baru. Adopsi Vista oleh konsumen jauh lebih cepat dibanding pengimplementasian Vista di perusahaan oleh administrator jaringan.

Sebagai contoh di sini, kita asumsikan Anda telah mempunyai koneksi ke jaringan remote melalui VPN atau koneksi lainnya. Masalah yang akan dipecahkan adalah menyelesaikan koneksi remote desktop. Kita asumsikan juga PC Windows XP telah dikonfigurasi untuk menerima koneksi remote desktop.

Setelah membuat koneksi VPN, jalankan aplikasi Remote Desktop Connection (Start, All Programs, Accessories, Remote Desktop Connection). Tes kita di sini menggunakan Windows Vista Ultimate. Software koneksi remote versi Vista sangat mirip dengan aplikasi yang terdapat pada Windows XP. Kunci supaya koneksi bisa bekerja adalah Anda harus memasukkan nama lengkap remote PC.

Jika diperlukan, itu berarti Anda harus menambahkan nama domain di akhir nama PC workstation yang dituju. Formatnya akan sepert berikut: namaworkstationanda.domain.server. Tidak seperti Windows XP, software koneksi remote Vista akan melakukan otorisas pada waktu Anda mengklik tombol Connect.

Setelah mengklik OK, Anda akan melihat layar peringatan Vista menginformasikan bahwa beberapa fitur sekuritinya akan hilang karena ingin melakukan koneksi remote ke komputer Windows XP Tidak ada yang bisa Anda lakukan tentang ini selain menekan Yes Selanjutnya Anda akan melihat desktop remote PC.

AKSES REMOTE DENGAN TIGHTVNC

Download paket instalasi situs web TightVNC. Pada contoh di sini, kita akan melakukan  full installation dengan  setting default. Secara default, file .vnc diasosiasikan dengan TightVNC Viewer. Jika Anda ingin sistem berfungsi sebagai VNC server atau system host, beri tanda centang () Register TightVNC Server as system service. Setelah proses instalasi selesai, reboot Windows. Pastikan TightVNC diset supaya berjalan sebagai service sistem. Dengan demikian, TightVNC dalam keadaan aktif pada waktu Anda ingin terhubung secara remote, meskipun tidak ada user hadir atau duduk di workstation remote.

Buat password untuk sesi TightVNC. Anda bisa memasukkan password dengan mengklik ganda ikon VNC dari dalam system tray Windows (atau jika tidak ada klik Start, All Programs, TightVNC, Launch TightVNC Server) dan masukkan password di bagian  Incoming Connections. Tentukan setting tambahan lainnya, seperti apakah Anda ingin men-disable penggunaan password kosong, meng-enable koneksi loopback, dan mencatat sesi ke log, dengan mengklik tombol Advanced. Setelah mengonfigurasi setting seperti yang diinginkan, klik Apply, lalu klik OK untuk menutup semua jendela yang terbuka.

Pastikan Windows  Firewall (dan semua software dan  hardware firewall lainnya) sudah  dikonfigurasi supaya  memperbolehkan traf-fic TightVNC. Pada tab  Exceptions Windows  Firewall, pastikan Tight-VNC Win32 Server sudah dicentang; jika tidak,  Windows Firewall akan memblokir koneksi yang akan dilakukan. Pada firewall lain, port 5900 mungkin dibutuhkan supaya traffic VNC bisa lewat dengan baik. (Implementasi VNC yang lain kadang-kadang menggunakan port 5500 dan 5800.) Untuk keamanan terbaik, tes konfi gurasi untuk mengetahui port minimum yang harus dibuka.

Lanjutkan proses dengan menginstalasi TightVNC pada system lokal dan kemudian lakukan langkah berikut untuk menghubungi sistem remote: buka TightVNC Viewer pada sistem lokal. Jendela Connection Details akan muncul. Masukkan nama remote VNC server yang ingin Anda hubungi. Jika Anda telah mengubah port default, gunakan port yang baru dengan menggunakan format berikut: workstationanda:port.

Klik Options untuk mengongurasi setting tambahan. Kotak dialog Connection Options akan muncul. Konfi gurasi setiap opsi yang dibutuhkan (misalnya menyembunyikan kursor remote dan membatasi pixel ke 8 bits pada jaringan yang lambat.), lalu klik OK. Anda akan dibawa kembali ke layar Connection Details. Klik OK untuk terhubung ke sistem remote. Masukkan password yang ditentukan pada sistem remote dan klik OK. Layar sistem remote akan tampil pada sistem lokal, sehingga Anda bisa melihat dan mengonfigurasi sistem remote dengan menggunakan workstation lokal atau server.

E-475 M merupakan generasi terbaru notebook Gateway yang menawarkan perpaduan performance yang prima ditunjang dengan daya tahan battery yang tinggi. Maka inilah Gateway E-475 M, dengan desain yang elegan dan ‘otak’ baru dari Intel mobile Dual Core Processor, menjadikan E-475 M sebagai salah satu notebook tercepat saat ini dengan daya tahan battery yang memuaskan.
E-475 M memang didesain klasik hitam sebagai notebook bisnis pada umumnya seperti pendahulunya, M-465 E. Dengan lengkung desain clamsell dan perlengkapan prosesor Intel 2.2-GHz Core 2 Duo T7500, memory 2 GB memang menunjang kecepatan E-475 M sebagai notebook tercepat yang mengoperasikan Windows Vista. Selain itu Gateway E-475 M ini juga dengan sangat mudah dan cepat menjalankan aplikasi kelas tinggi seperti game-game 3D, walaupun kualitas suaranya tidak begitu istimewa. Berikut adalah spesifikasi lengkap dari notebook ’super’ ini :

  • Processor Intel Core 2 Duo T7500
  • Memory 2 GB
  • Sistem Operasi Windows Vista Business
  • Display (Projector) / Diagonal Size: 15.4
  • Storage Hard Drive : 100 GB
  • Layar WXSGA 1680 x 1050
  • Optical Storage / Type: DVD±RW Double Layer

Untuk layar, Gateway tidak memakai layar glossy seperti yang banyak dipakai notebook-notebook keluaran terbaru saat ini, namun memakai tampilan yang lebih bersifat tidak memantulkan cahaya. Secara keseluruhan, walaupun dari segi harga notebook ini tidak tergolong murah, namun unjuk kerja yang dijanjikannya sama sekali tidak akan mengecewakan, baik dari segi penampilan, kecepatan, kualitas gambar, maupun kenyamanan. Terlebih lagi ditunjang oleh battery yang dapat bertahan cukup lama, yaitu lebih dari 5 jam dalam sekali proses charge dan pemakaian salah satu prosesor Dual Core tercepat milik Intel merupakan suatu jaminan kulitas dari yang ditawarkan Gateway dalam seri E-475 M ini.

Jaringan komputer adalah sebuah sistem yang terdiri atas komputer dan perangkat jaringan lainnya yang bekerja bersama-sama untuk mencapai suatu tujuan yang sama. Tujuan dari jaringan komputer adalah:

Agar dapat mencapai tujuan yang sama, setiap bagian dari jaringan komputer meminta dan memberikan layanan (service). Pihak yang meminta layanan disebut klien (client) dan yang memberikan layanan disebut pelayan (server). Arsitektur ini disebut dengan sistem client-server, dan digunakan pada hampir seluruh aplikasi jaringan komputer.

Klasifikasi Berdasarkan skala :

  • Local Area Network (LAN)
  • Metropolitant Area Network (MAN)
  • Wide Area Network (WAN)

Berdasarkan fungsi : Pada dasarnya setiap jaringan komputer ada yang berfungsi sebagai client dan juga server. Tetapi ada jaringan yang memiliki komputer yang khusus didedikasikan sebagai server sedangkan yang lain sebagai client. Ada juga yang tidak memiliki komputer yang khusus berfungsi sebagai server saja. Karena itu berdasarkan fungsinya maka ada dua jenis jaringan komputer:

  • Client-server

Yaitu jaringan komputer dengan komputer yang didedikasikan khusus sebagai server. Sebuah service/layanan bisa diberikan oleh sebuah komputer atau lebih. Contohnya adalah sebuah domain seperti www.detik.com yang dilayani oleh banyak komputer web server. Atau bisa juga banyak service/layanan yang diberikan oleh satu komputer. Contohnya adalah server jtk.polban.ac.id yang merupakan satu komputer dengan multi service yaitu mail server, web server, file server, database server dan lainnya.

  • Peer-to-peer

Yaitu jaringan komputer dimana setiap host dapat menjadi server dan juga menjadi client secara bersamaan. Contohnya dalam file sharing antar komputer di Jaringan Windows Network Neighbourhood ada 5 komputer (kita beri nama A,B,C,D dan E) yang memberi hak akses terhadap file yang dimilikinya. Pada satu saat A mengakses file share dari B bernama data_nilai.xls dan juga memberi akses file soal_uas.doc kepada C. Saat A mengakses file dari B maka A berfungsi sebagai client dan saat A memberi akses file kepada C maka A berfungsi sebagai server. Kedua fungsi itu dilakukan oleh A secara bersamaan maka jaringan seperti ini dinamakan peer to peer.

Berdasarkan topologi jaringan : Berdasarkan [topologi jaringan], jaringan komputer dapat dibedakan atas:

  • Topologi bus
  • Topologi bintang
  • Topologi cincin
  • Topologi Mesh (Acak)
  • Topologi Pohon (Hirarkis)
  • Topologi Linier