Belajar membuat applikasi socket Dengan PHP

Tuesday, May 31, 2016

Belajar membuat applikasi socket Dengan PHP

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

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 dismpchat , 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 .

{ 0 comments... read them below or add one }

Post a Comment