Belajar membuat applikasi socket Dengan PHP

Ok sahabat muda pecinta komputer sekian lama saya tidak pernah memposting artikel baru di blog ini membuat saya semakin rindu untuk menulis lagi,  ide dan pemikiran yang ingin saya tuangkan dalam bentuk tulisan , tentunya sangat banyak .  Namun terkadang rasa malas sering kali berkelayutan , tapi kali ini saya coba sempatkan menulis artikel ini,

Mungkin bagi yang sering bermain dengan socket programming judul ini mungkin udah gak asing lagi tapi bagi saya pribadi justru menarik dan menantang, apa manfaat pemograman dengan socket applikasi ?..

Contoh yang paling sederhananya adalah membuat program chating tanpa menggunakan database , ya sebenarnya bisa juga membuat applikasi chtaing dengan database hanya saja dalam jumlah tertentu kurang effective.

Awalnya saya coba-coba membuat script untuk bermain client server di php , lama-kelamaan rupanya menarik juga akhirnya ya sudah saya langsung menuju ke Refrensinya PHP di : http://www.php.net/manual/en/ref.sockets.php

Silahkan  di ubek-ubek ( he…. He… )…

Disini saya punya dua file pertama untuk di sisi server dan yang kedua di sisi Client , berikut ini untuk script disisi server :

--StartPHP--

class server_socket{              
    var $host;       
    var $port;         
    var $buffer;        
    var $connected;         
    var $bind_result;        
    var $lstn_result;         
    var $newSocket;         
    var $to_client;         
    var $from_client;         
    var $writeLen;                  
    
    function __construct($host="127.0.0.1",$port=9001,$max=0){             
        $this->host      = $host;            
        $this->port      = $port;             
        $this->buffer    = 1024;             
        $this->connected = false;             
        echo " Start listening... \n\r";             
        $this->server_created_socket();         
    }                  
    
    public function server_created_socket(){             
        set_time_limit(0);             
        $this->connected = socket_create(AF_INET,SOCK_STREAM,0) or die("Could not create a socket");             
        if($this->connected){                 
            $this->bind_result= socket_bind($this->connected,$this->host,$this->port) or die('could not bind to port');                 
                if($this->bind_result){
                    $this->lstn_result= socket_listen($this->connected,3) or die('unable to listen');
                    $this->open_listening();
                }
        }
        else{
            self::__construct();
        }
    }
    
    private function listen_loop(){
            $this->newSocket    = socket_accept($this->connected);             
            if($this->newSocket) return true;            
            else return false;         
    }
    
    public function open_listening(){
        $this->listen_loop();
        $this->from_client  = socket_read($this->newSocket,$this->buffer);            
        $this->from_client  = trim($this->from_client);         
        $this->str_cmd[date('Y-m-d h:i:s')]='';      
        if($this->from_client){
            $this->str_cmd[date('Y-m-d h:i:s')]  = $this->from_client; 
            self::write_callback_toclient();
            self::console();  
            socket_set_block($this->connected);  
                if(!$this->connected) $this->server_created_socket(); 
                $this->server_created_socket();
        }
    }
    
    function write_callback_toclient(){
        $this->to_client = $this->from_client;
        $this->writeLen  = socket_write($this->newSocket,$this->to_client,strlen($this->to_client)) or die('unable to write');
    }
    
    public function console(){
    
        if(is_array($this->str_cmd)){
            $n=0;
            foreach($this->str_cmd as $key=>$value){
                echo "[".$key."] :".$value." \n\r";
                $n++;
            }
        }
    }
 }
  
  ob_implicit_flush(true);     
  $ok = new server_socket($host="127.0.0.1",$port=9001,$max=0);
 
---EndPHP--- 

Kasih nama misalnya : server_socket.php, selanjutnya buat file untuk di sisi client :

<?php
$host        ="127.0.0.1";
$port         = 9001;
$message     = " IP : ".$_SERVER['REMOTE_ADDR'];
$socket     = socket_create(AF_INET, SOCK_STREAM, 0) or die("[".date('Y-m-d H:i:s')."]from Client: Could not create socket\n");
$result     = socket_connect($socket, $host, $port) or die("[".date('Y-m-d H:i:s')."]from Client: Unable to connect to server\n");

socket_write($socket, $message, strlen($message)) or die("from Client: Unable to send data to server\n");

$result     = socket_read ($socket, 1024) or die("from client: Could not read response from server \n");

socket_write($socket, "END", 3) or die("from client: Could not end session \n");
socket_close($socket);
$result     = trim($result);
echo "\n Message returned : ".$result;
?>

Kasih Nama : test_client3.php

selanjutnya kita test dengan membuka comand prompt ( saya pake windows dengan server local XAMPP)
  C:\xampp\php>php -f c:\\xampp\htdocs\smpchat\server_socket.php (Kebetulan letak folderya di smpchat , tapi mau di folder apa aja terserah ) yang penting di loclalhost

selanjutnya buka browser anda misalnya : Mozila

Seperti gamabar berikut ini:

Refresh berkali-kali..

setelah itu lihat reaksi pada program php yang kita jalankan di comand prompt :

Perhaltikan pada gambar ini , ternyata socket disisi server sudah meresponse file yang kita request dari sisi client .

Untuk membukitkannya  kita bisa mengakses dari beberapa browser seperti , crhome, IE, dll,

Ubah script disisi clientanya pada bagian

$_SERVER[‘REMOTE_ADDR’];

dengan $_SERVER[‘USER_AGENT’]

Karna jika benar maka pada php yang kita jalankan lewat console akan menampikan Request
client dari browser apa saja .

Oke untuk lebih lanjutnya silahkan di uji coba sendiri tentu dengan gaya-masing, dan yang penting gak mesti OOP,

kalau yang saya buat kebetulan saya lagi rajin Pake OOP php, gak pake OOP pun tetap bisa .

Selamat mencoba N good luck.. 🙂

7 responses to “Belajar membuat applikasi socket Dengan PHP

  1. Gota Juli 5, 2012 pukul 9:39 am

    Keren scriptnya gan, coba praktekin ya

  2. Dayat September 3, 2012 pukul 4:09 pm

    sip mas artikelnya..

    tapi tu kog cuma bisa jaln di command line aja ya..
    kalo pngen seerver jaln di browser gmna ya ??

    soalnya pngen saya gbungkan ma program saya, jadi kalo ada client request ada aksi tertentu

  3. Kata Mutiara Pendidikan Juni 10, 2015 pukul 6:55 pm

    Thanks infonya bagus sekali goo.gl/W7xRDu

  4. mochrozid April 1, 2016 pukul 7:04 am

    gan bisa minta penjelasannya maksud dari pernyataan ini “membuat program chating tanpa menggunakan database , ya sebenarnya bisa juga membuat applikasi chtaing dengan database hanya saja dalam jumlah tertentu kurang effective.”, saya kok gak paham ya hehehe

  5. hari Oktober 16, 2016 pukul 5:05 pm

    ga lengkap filenya

  6. Muslihudin Oktober 19, 2019 pukul 9:42 am

    thanks tutornya gan

Tinggalkan komentar