Tag

, , , , , , , ,


Setelah sebelumnya sukses dengan tulisan ini saya kembali lagi dengan tutorial yang lebih canggih, masih tentang Flash dan PHP Socket. Kalau belum pernah baca tulisan sebelumnya sebaiknya baca dulu ya fren (maap, gak enak sebut2 kompetitor😀 )

Sebenernya ada alasannya kenapa saya membuat tulisan ini, kemarin ada temen yang kirim message lewat GTalk. Saya kasih kutipannya :

1:19 PM Bowo: dit
1:20 PM me: yup
Bowo: gw mo nanya soal blog lo yang tentang socket itu
bisa sekarang?
me: oke
knp ?
bisa2
Bowo: bisa sih bisa
1:21 PM tapi cuman di compiler doank
me: trus ?
connection failed ya ?
Bowo: jadi kalo swfnya dibuka pake browser, bakalan ada error security gitu engga
me: phpnya dah running ? pake perintah “php.exe -q <script>”
ooo
1:22 PM security ya?
Bowo: kalo ctrl+enter di flash-nya ok
me: pasti portnya lu kasih < 1024 ya?
Bowo: ga koq
9999
me: pake Flash Player berapa ?
Bowo: 9
Lihat teks berwarna merah diatas ? dia mengikuti langkah-langkah di tulisan saya sebelumnya, tapi ketika menjalankan file .swf malah dapet error security seperti gambar dibawah ini.
Pada tulisan saya sebelumnya, saya lupa menjelaskan kalau saya menggunaka Flash Player 8. Aplikasi Flash yang berhubungan dengan network yang berbeda domain pada dasarnya tidak diijinkan oleh Flash Player versi 8 keatas. Pada Flash Player 8 diperkenalkan yang namanya cross domain policy, yaitu sebuat file xml yang mengatur boleh atau tidaknya Flash Player mengakses resource diluar host komputer itu. Pada tulisan saya sebelumnya, saya menggunakan port diatas 1024 karena Flash Player sebenarnya “tidak bisa” menggunakan port dibawah 1024 dengan alasan keamanan. Kenapa kata-kata tidak bisa saya beri tanda kutip, karena kalo harus menggunakan port diatas 1024 berarti aplikasi kita justru tidak standar, sulit untuk di deploy, apalagi kalau pake shared hosting. Contohnya di kantor saya, SysAdmin tidak dengan mudahnya membuka port 9999 dengan alasan keamanan, belum lagi port tersebut kemungkinan secara default akan di tutup aksesnya oleh firewall. Akhirnya saya berfikir bagaimana bila saya menggunakan port yang sudah ada dan tidak di blok oleh Firewall, kenapa tidak pakai port 80 saja ? Flash Player sebenarnya bisa menggunakan port dibawah port 1024, port 80 misalnya, tetapi pada Flash Player 8 keatas, akses tersebut dibatasi. Berarti Flash Player 7 dan sebelumnya sebenarnya sangat tidak aman, makanya upgrade saja Flash Player-nya ke versi yang lebih baru. Pada Flash Player 7 kebawah, semua aplikasi Flash yang berkomunikasi dengan internet tidak ada batasan, mau pakai port berapa pun bisa, bahaya khan ? Artikel dari Adobe tentang cross domain policy bisa dibaca disini.
Oke kembali ke topik. Sekarang bagaimana caranya biar file .swf yang telah kita buat bisa mengakses resource di jaringan menggunakan port dibawah 1024 ? Kita bisa menggunakan perintah di Action Script sebagai berikut :
Security.loadPolicyFile(“xmlsocket://localhost:80”);
Maaf, saya salah seharusnya saya menjelaskan bagaimana sih sebenarnya Flash Player itu berkomunikasi dengan server😀 biasanya aplikasi kita menggunakan skrip seperti ini :
socket = new Socket();
socket.connect(“localhost”, 80);
Bila kita menjalankan file .swf, maka prosesnya adalah :
  • Flash Player mengirimkan pesan dalam bentuk xml: <policy-file-request/>
  • Bila server mengembalikan xml seperti ini : <?xml version=”1.0″?><cross-domain-policy><allow-access-from domain=”*” to-ports=”80″ /></cross-domain-policy>, maka Flash Player tersebut diijinkan untuk mengakses port 80.
  • Kalau misalnya Flash Player tidak menerima ijin (berupa file xml diatas) maka koneksi terpaksa diputus.
Nah, kita harus secara eksplisit menggunakan perintah dibawah ini pada ActionScript yang kita buat. Perintah tersebut akan meminta “ijin” atau mencari file cross-domain-policy, kalau misalnya kita tidak menuliskan skrip dibawah, maka secara implisit Flash Player akan mencari pada port 843.
Security.loadPolicyFile(“xmlsocket://localhost:80”);
Berarti agar aplikasi Flash 8 bisa berinteraksi dengan socket server, maka server harus mengirimkan “surat ijin” ke klien. Berikut kutipan skrip php yang saya tambahkan.
if (preg_match(“/policy-file-request/i”, $buffer) || preg_match(“/crossdomain/i”, $buffer)) {
$contents='<?xml version=”1.0″?><cross-domain-policy><allow-access-from domain=”*” to-ports=”80″ /></cross-domain-policy>’;
socket_write($socket,$contents);
$contents=””;
$index = array_search($socket, $read_sockets);
unset($read_sockets[$index]);
socket_shutdown($socket, 2);
socket_close($socket);
}
Pada baris yang di tebalkan diatas maksudnya begini, kalau ada klien yang mengirimkan string policy-file-request atau crossdomain maka server akan mengirimkan “surat ijin” dalam bentuk XML.
Sekarang aplikasi Flash kita bisa mengakses port berapapun di server. Paling mudah kita menggunakan port 80, karena biasanya tidak di blok oleh Firewall. FYI, saya dikantor membuat sebuah aplikasi yang menampilkan sms yang masuk diurut dari yang paling cepat. Berikut salah satu modul yang saya buat, jangan digunakan untuk komersil ya.. maaf warnanya ijo-ijo.. abisnya mau bikin warna biru, merah atau kuning gak boleh disini😀
  • Server, socket server. Cara menjalankannya, ketik di console/command prompt, php.exe -q <NAMA_SKRIP>
  • SMS Result, menampilkan hasil sms
  • SMS Simulation, kirim smsmnya pakai aplikasi ini aja, tapi gak benar-benar sms, cuma simulasi