標籤

BAT (38) shell (34) Virtual Machine (33) Xubuntu (29) acfs (25) PHP (24) CentOS (21) Virtul Box (20) 編輯器 (17) 資料庫 (15) lubuntu (13) windows (13) CPP (12) ubuntu (12) chrome (11) laravel (10) Docker (9) Python (9) 5A88 (7) VMware (6) 資料結構 (6) Javascript (5) Node (5) Proxmox VE (5) 公告系統 (5) 程式積木 (5) Android Studio (4) ANN (3) OB2D2016x64 (3) Xoops (3) clonezilla (3) samba (3) 公文 (3) 其他 (3) 硬體 (3) API (2) Android (2) AppInvent2 (2) Html (2) Hyper-V (2) Nas (2) botnet (2) mbot (2) swift (2) wordpress (2) 樣板 (2) 防火牆 (2) AD的應用 (1) Ansible (1) Arduino (1) CSS (1) GitLab (1) HA Proxy (1) LegoEV3 (1) PowerShell (1) Scratch (1) VM (1) XenServer (1) kotlin (1) linuxmint (1) lxc (1)

2019年2月7日 星期四

php socket 初步實作Server 與 Client

網路很多文章,自己實作之後,發現無法執行。自己覺得很沮喪,也無法除錯。
現在將實作可行的部分,寫下來。
一、環境介紹:
Server 虛擬機IP :192.168.32.181
Client  虛擬機IP :192.168.32.182

二、程式碼:(參考資料1)

(1)Server 程式碼

檔名:ServerSocket.php

<?php
$server_ip = '192.168.32.181';
$port = 25001;

$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_bind($socket,$server_ip,$port);
socket_listen($socket,SOMAXCONN);
echo "SOMAXCONN =".SOMAXCONN."\n";
$count = 0;
do {
    $msgsocket = socket_accept($socket);
    echo "msgsocket =".$msgsocket."\n";
    if ($msgsocket < 0) {
        echo "socket_accept() fail : ".socket_strerror(socket_last_error())."\n";
        break;
    } else {
        $datetime = date('Y-m-d H:i:s',time());
        echo "Server datetime:{$datetime}\n";
        $msg = "Hello client!".$count."\n";
        socket_write($msgsocket,$msg,strlen($msg));
        $buff = socket_read($msgsocket,2048);
        echo "Receive client message: {$buff}"." count: ".$count."\n\n";
    }
    $count++;
    socket_close($msgsocket);
} while ($count <= 5);
socket_close($socket);
?>

(2)client程式碼

檔名:client.php

<?php
$server_ip = '192.168.32.181';
$port = 25001;
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_connect($socket,$server_ip,$port);
$in = "Hello Server!\n";
$out = '';
socket_write($socket,$in,strlen($in));
while($out = socket_read($socket,2048)) {
    echo "Server response success!\n";
    echo "Receive message:{$out}";
}
socket_close($socket);
?>
三、如何測試
 1.使用終端機
    (1)Server 端,指令
         $php ServerSocket.php

    (2)Client 端,指令
         $php client.php
    此時,Server 端出現的訊息為

    此時,Client 端,連下5次指令
          $php client.php
   此時,Server 端出現的訊息為

   2.使用瀏覽器
       Server端只能下指令,無法使用瀏覽器執行程式。而client端可以用瀏覽器來執行。
         (1)Server 端,指令
         $php ServerSocket.php
         (2)Client 端,開啟瀏覽器,其網址列為http://192.168.32.182/client.php
          注意:client.php 須放在/var/www/html/ 內,權限為664
                 
          按下F5,重新整理網頁,就可以看到變化
參考資料:
1.PHP Socket 編程實戰總結
https://www.jianshu.com/p/a7a2b828088e
2.基於PHP+MySQL的聊天室設計

沒有留言:

張貼留言

在 Windows 10 x64 1909版,使用BAT快速安裝公文系統與人事服務網(自然人憑證)版

相關內容移往 https://skjhcreator.blogspot.com/2021/02/windows-10-x64-1909bat.html