My View

The stupidity of man, seen through the scope of my rifle…

Posts Tagged ‘php

[Tutorial] Flash dan Socket Version 2

with 5 comments

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 :D )

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 :D 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 :D
  • 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

Written by Pradita Utama

July 25, 2008 at 10:35 am

[Tutorial] Flash dan Socket

with 6 comments

Kenapa gw bikin tutorial ini ? karena di kantor gw lagi-lagi berhubungan dengan aplikasi client-server buat suatu acara nasional dan gw milih pakai flash karena gampang untuk desain dan maintenance. Sebetulnya pakai Java or PHP bisa cuma kalo PHP minimal harus web-based atau kalo gak desktop application pake PHP (PHP-CLI), Java juga bisa dua-duanya tapi effortnya mungkin lebih berat daripada pakai Flash. Flash ini gw buat sebagai desktop application, jadi gak perlu install Flash Player. Udah lebih dari 3 tahun gw gak pernah sentuh-sentuh yang namanya Flash, dalam arti bikin aplikasi yang berat-berat.

Oke deh, langsung aja. Gw disini gak jelasin soal apa itu Socket atau Flash atau bagaimana cara menggunakan Adobe Flash. Kita akan membuat aplikasi Chat room. Kita harus tau beberapa hal sebelum memulai :

  1. Mengerti PHP, kalau ngerti socket lebih baik
  2. Mengerti konsep Adobe Flash
  3. Sedikit bisa Actionscript

Aplikasi yang dibutuhkan adalah :

  1. Web Server yang sudah dikonfigurasi dengan PHP
  2. Editor text
  3. Adobe Flash 8

Mungkin ada yang bertanya, “kok gak pake database sih ?”, kita gak perlu database karena sebenernya gw disini mau memperlihatkan membuat aplikasi client-server yang high-performance, hemat bandwidth dan elegan.. cie hahaha..

Arsitektur sistemnya begini, Client -> Socket Server -> Client, jadi gak ada yang namanya frequently-pooling dari client. Kalo kita tiap detik request ke server buat liat ada message baru ato gak, itu namanya boros bandwidth. Coba kalo aplikasinya gak kita pake, tapi cuma di run aja, udah lumayan tuh :) nah kalo pake socket, ntar socket servernya yang push ke client.. gitu lho.

Pertama kita bikin dulu socket servernya pake PHP. Copas skrip ini ke text editor trus save dengan nama yang kalian mau. Misal, chat.php.

#!/usr/bin/php -q
<?php
error_reporting(E_ALL);
set_time_limit(0);
ob_implicit_flush();
$address = ‘172.16.34.170′; //ganti dengan localhost atau ip komputer kamu
$port = 9999; //terserah berapa aja, asal diatas 1024. Karena flash membaca port > 1024
function send_Message($allclient, $socket, $buf) {
foreach($allclient as $client) {
socket_write($client, “$socket wrote: $buf”);
}
}

if (($master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
echo “socket_create() failed, reason: ” . socket_strerror($master) . “n”;
}

socket_set_option($master, SOL_SOCKET,SO_REUSEADDR, 1);
if (($ret = socket_bind($master, $address, $port)) < 0) {
echo “socket_bind() failed, reason: ” . socket_strerror($ret) . “n”;
}
if (($ret = socket_listen($master, 5)) < 0) {
echo “socket_listen() failed, reason: ” . socket_strerror($ret) . “n”;
}
$read_sockets = array($master);
while (true) {
$changed_sockets = $read_sockets;
$num_changed_sockets = socket_select($changed_sockets, $write = NULL, $except = NULL, NULL);
foreach($changed_sockets as $socket) {
if ($socket == $master) {
if (($client = socket_accept($master)) < 0) {
echo “socket_accept() failed: reason: ” . socket_strerror($msgsock) . “n”;
continue;
} else {
array_push($read_sockets, $client);
}
} else {
$bytes = socket_recv($socket, $buffer, 2048, 0);
if ($bytes == 0) {
$index = array_search($socket, $read_sockets);
unset($read_sockets[$index]);
socket_close($socket);
}else{
$allclients = $read_sockets;
array_shift($allclients);
send_Message($allclients, $socket, $buffer);
}
}

}
}
?>

kita menjalankan skrip diatas bukan sebagai web, tapi sebagai aplikasi shell. Buka command line trus masuk kedalam folder dimana file PHP.EXE berada, trus ketik

php.exe -q <PATH_SKRIP_DIATAS>chat.php

nah… harusnya commandline nya diem aja… itu berarti kita berhasil membuat socket server. Gw gak akan jelasin baris-perbaris skrip diatas, skrip diatas sebenernya gw kompilasi dari beberapa sumber setelah baca PHP Manual :)

Tahap pertama berhasil, sekarang tinggal bikin aplikasi desktopnya deh..

buka Adobe Flash 8 trus bikin seperti gambar dibawah.

objek2nya adalah dynamictext (kasih nama msgArea), inputtext (kasih nama inputMsg), trus sama Component Button (kasih nama pushMsg). disitu ada 2 layer, 1 buat action, 1 buat object2 tadi.

Trus klik di frame 1 pada layer 1, pencet F9 buat buka Actionscript editor. copas aja kode dibawah

mySocket = new XMLSocket();
mySocket.onConnect = function(success) {
if (success) {
msgArea.htmlText += “<b>Server connection established!</b>”;
} else {
msgArea.htmlText += “<b>Server connection failed!</b>”;
}
};
mySocket.onClose = function() {
msgArea.htmlText += “<b>Server connection lost</b>”;
};
XMLSocket.prototype.onData = function(msg) {
msgArea.htmlText += msg;
};
mySocket.connect(“172.16.34.170″, 9999); //IP address socket server yang dibuat tadi

function msgGO() {
if (inputMsg.htmlText != “”) {
mySocket.send(inputMsg.htmlText+”n”);
inputMsg.htmlText = “”;
}
}
pushMsg.onRelease = function() {
msgGO();
};

jadi deh hehehe… gampang khan ? ya iyalah, Flash udah membungkus fungsi2 socket ke dalam method2 yang gampang digunain. Di Flash ada 4 method yang digunakan untuk socket:

  1. onConnect, method ini dipanggil ketika koneksi ke server dan bisa kita override
  2. onClose, method ini dipanggil kalau koneksi ke server putus, dan bisa kita override juga
  3. onData, method ini dipanggil ketika server mengirimkan data ke client. data yang dikirim oleh server harus diakhiri dengan chr(0) atau zero byte, kalau gak gitu, flashnya gak akan nerima
  4. onXML, kalau yang ini dipanggil kalau ada xml yang datang dengan koneksi XMLSocket

setelah itu coba deh di publish flashnya, trus jalanin deh file .swf nya atau file .exe nya. Simpel banget khan ? masih banyak aplikasi yang bisa dibikin pake socket dan flash… kebayang donk, flash gak cuma sebagai animation-tool tapi bisa sebagai RIA / Rich Internet Application. Ide-ide aplikasi lain :

  1. Messenger
  2. Monitoring Data
  3. Online Games
  4. Portable shell window
  5. dsb
  6. dsb
  7. dsb

Written by Pradita Utama

July 18, 2008 at 1:43 pm

Posted in AJAX, Flash, Network, Tutorials

Tagged with , , ,

Hosting Gratis

with 2 comments

Saya pernah punya account hosting berbayar sewaktu SMU dulu, tujuannya waktu itu lagi-lagi cuma biar disangka “melek internet” diantara temen-temen. Waktu itu saya hosting di PT MWN sepaket dengan domainnya. Hosting tersebut saya gunakan untuk menampilkan website pribadi yang isinya cuma foto dan biodata, belum terpikir untuk digunakan sebagai blog apalagi menggunakan bahasa pemrograman yang njlimet, cukup HTML saja. Setelah hampir 2 tahun (selama SMU) website saya rasa tidak berguna sehingga setelah habis masa berlakunya tidak saya perpanjang. Ketika masuk kuliah di Jurusan Teknik Informatika Sekolah Tinggi Teknologi Telkom saya juga pernah punya hosting berbayar walaupun berdua dengan teman, lagi-lagi saya merasa belum ada gunanya mempunyai website sendiri.

Nah, ketika saya butuh untuk melakukan live test tugas akhir saya yang berjudul “Analisis dan Implementasi AJAX Menggunakan Framework Dojo Toolkit” saya sempat kebingungan untuk mencari hosting karena saya tidak akan menggunakannya terlalu lama, paling lama 1 bulan. Akhirnya saya menggunakan jasa Google untuk mencari hosting gratis yang mendukung PHP 5.x.x, MySQL versi 3 atau yang lebih baru, dan yang terpenting bebas iklan atau banner. Setelah sekitar satu hari mencoba banyak sekali jasa hosting gratis saya menemukan 2 penyedia jasa tersebut yaitu :

  1. Awardspace
  2. 000webhost

Saya telah mencoba dua-duanya dan saya lebih memilih pilihan kedua karena pada awardspace hanya menyediakan storage sebesar 200MBytes sedangkan 000webhost menyediakan 250MBytes dan CPanel yang lebih manusiawi karena benar-benar bebas banner. Bahkan akses FTP menggunakan Filezilla lebih stabil dibandingkan dengan Awardspace.

Berikut saya tampilkan versi PHP yang digunakan pada 000webhost.

Semoga informasi ini bermanfaat. Sekian.

Written by Pradita Utama

January 9, 2008 at 11:09 am

Posted in Internet

Tagged with , , , ,