標籤

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年4月20日 星期六

php socket 修正 Server 與 Client 實作 (一)

目的:
1.Server端:能接收client傳來的訊息並寫入檔案且不傳訊息給client
2.Client端:不接收server傳來的訊息

Server端IP:192.168.32.102 Port:25001
檔名:ServerSocket.php ,檔案所在位置為 /home/webadmin/ServerSocket.php

<?php
$server_ip = '192.168.32.102';
$port = 25001;
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_bind($socket,$server_ip,$port);
socket_listen($socket,SOMAXCONN);
$count = 0;
do {
    $msgsocket = socket_accept($socket);
    if ($msgsocket < 0) {
        echo "socket_accept() fail : ".socket_strerror(socket_last_error())."\n";
        break;
    } else {
        $datetime = date('Y-m-d H:i:s',time());
        $str = "Server datetime:{$datetime}\n";
        $buff = socket_read($msgsocket,2048);
        $str .= "Receive client message: {$buff}"." count: ".$count."\n\n";
        echo $str;
        $str01 = $buff." ".$datetime."\n";
        if ($str01!="") {
            $file = fopen("/home/webadmin/html/ServerSocket", "a+");
            fwrite($file, $str01);
            fclose($file);
        }
    }
    $count++;
    socket_close($msgsocket);
} while ($count <= 5);
socket_close($socket);
?>
執行 ServerSocket.php 的指令
$php ServerSocket.php

Client端:IP:192.168.32.182
檔名:client.php
傳送$in 的內容給 Server 端

<?php
$server_ip = '192.168.32.102';
$port = 25001;
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_connect($socket,$server_ip,$port);
$in = "\$\$H167,864292040653451,AAA,35\n";
socket_write($socket,$in,strlen($in));
socket_close($socket);
?>
執行client.php的指令
$php client.php

另外,在Server端的/home/webadmin/html/ 會出現一個檔案為ServerSocket
其內容為

資料來源:
1.php socket 初步實作Server 與 Client
2.[PHP]開啟及寫入檔案

2019年4月18日 星期四

利用 swoole 架設 websocket 進階範例

1.安裝套件
sudo apt-get install curl

2.安裝 composer
$curl -sS https://getcomposer.org/installer | php
$sudo mv composer.phar /usr/local/bin/composer
$sudo chmod +x /usr/local/bin/composer
$composer

3.建立 composer.json
$sudo touch composer.json
$sudo pico composer.json
其內容為
{
    "require": {
         "jsnlib/swoole": "^1.0"
    }
}

4.安裝套件
$composer update

5.建立與編輯 swoole_advanced.php
$sudo touch swoole_advanced.php
$sudo pico swoole_advanced.php
swoole_advanced.php 所在的IP: 192.168.32.106
其內容為
<?php
require_once 'vendor/autoload.php';

// 建立 websocket 物件,監聽 192.168.32.106:8080 連接埠
$ws = new swoole_websocket_server("192.168.32.106", 8080);

// 監聽 WebSocket 連接打開事件
$ws->on('open', function ($ws, $request) {
echo "進入者編號:{$request->fd}\n";
});

// 監聽 WebSocket 訊息事件
$ws->on('message', function ($ws, $frame) {

echo "收到進入者 {$frame->fd} 訊息: {$frame->data} \n";

  \Jsnlib\Swoole::push_all([
'ws'           => $ws,
'self'         => $frame->fd,
'is_send_self' => false,
'data'         => $frame->data
  ]);

});

// 今天 WebSocket 連接關閉事件
$ws->on('close', function ($ws, $fd) {
echo "離開者編號:{$fd}\n";
});

$ws->start();

?>

6.建立 client_swoole_advance.html
$sudo touch client_swoole_advance.html
$sudo pico  client_swoole_advance.html
client_swoole_advance.html 所在位置IP:192.168.32.182,/home/webadmin/html/
其內容為
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script>
        var wsServer = 'ws://192.168.32.106:8080';
        var websocket = new WebSocket(wsServer);

        websocket.onopen = function (evt) {
            console.log("成功連接到 WebSocket 服務");
        };

        websocket.onclose = function (evt) {
            console.log("關閉連接 WebSocket 服務");
        };

        websocket.onmessage = function (evt) {
            console.log('伺服器顯示:' + evt.data);
        };

        websocket.onerror = function (evt, e) {
            console.log('發生錯誤: ' + evt.data);
        };

        // 發送訊息給所有人
        const send_msg = function (){
            var name = document.getElementsByClassName('name')[0].value;
            var msg = JSON.stringify({
                message: '你好,我是' + name,
            })
            websocket.send(msg)
        }
    </script>
</head>
<body>
<input type="text" class="name" placeholder="請輸入姓名" autofocus>
<input type="submit" value="發送" onclick="send_msg(); ">
</body>
</html>

7.server端 在終端機啟動 swoole_advance.php
$php swoole_advance.php

8.client端 用瀏覽器 chrome 打開 或是 指令開啟
$cd /home/webadmin/html
$google-chrome client_swoole_advance.html
此時,server端會出現進入者編號:1
client端 開啟[開發人員工具]
可以看到
此時,若在[請輸入姓名],輸入Jack後,按下[發送]
server端會出現  收到進入者 1 訊息: {"message":"你好,我是Jack"}

開啟第二個分頁,並將第一分頁的網址貼上,然後打上[ Wood ],按下送出。如下圖:
server端會出現
此時,第一分頁則會出現

資料來源:
1.php – swoole – 架設 websocket 進階範例

2019年4月17日 星期三

利用C++ 寫程式變更C:\Windows\System32\drivers\etc\hosts 檔名

1.檔名為 AllOpen.cpp,並完成編譯產生AllOpen.exe
其內容為
 #include <stdio.h>
 #include <fcntl.h>

 int main(void) {
  const char* oldname01 = "C:\\Windows\\System32\\drivers\\etc\\hosts";
  const char* newname01 = "C:\\Windows\\System32\\drivers\\etc\\hosts02";
        const char* oldname02 = "C:\\Windows\\System32\\drivers\\etc\\hosts01";
        const char* newname02 = "C:\\Windows\\System32\\drivers\\etc\\hosts";
    if(rename(oldname01,newname01)==0) {
      printf("%s -> %s:OK!",oldname01,newname01);
        if(rename(oldname02,newname02)==0) {
              printf("%s -> %s:OK!",oldname02,newname02);
    } else {
      perror("rename");
    }
} else {
    perror("rename");
}
 }

2.在C:\Windows\System32\drivers\etc\ 目錄下,要有兩個檔,分別為 hosts 與 hosts01

3.對AllOpen.exe按下滑鼠左鍵,選擇[ 以系統管理員身分執行 ]

4.在C:\Windows\System32\drivers\etc\ 目錄下,可以看到更名了

資料來源:
1.C语言rename()函数:重命名文件或目录
2.[ C / C++] 讀取任意目錄的 檔案名稱、路徑、濾特定副檔名

2019年4月16日 星期二

如何利用 BAT 變更 C:\Windows\System32\drivers\etc\hosts 檔名

1.完成 AllOpen.bat
檔名:AllOpen.bat
其內容為
@ECHO OFF
REM  到 C:\Windows\System32\drivers\etc\ 目錄下
cd C:\Windows\System32\drivers\etc\
PAUSE
REM  更改檔名hosts hosts02
ren  hosts hosts02
REM  更改檔名hosts01 hosts
ren  hosts01 hosts
ECHO finish

2.在C:\Windows\System32\drivers\etc\ 目錄下,要有兩個檔,分別為 hosts 與 hosts01


3.對AllOpen.bat按下滑鼠左鍵,選擇[ 以系統管理員身分執行 ]

4.在C:\Windows\System32\drivers\etc\ 目錄下,可以看到更名了


資料來源:
1.[教學] DOS批次檔製作 - BAT檔語法
2.MS-DOS常用指令教學-REN,TYPE,ATTRIB

2019年4月15日 星期一

Xubuntu 16.04 如何檢查遠端電腦Port 是否開啟

1.安裝nmap
$sudo apt-get install nmap

2.掃描 遠端IP 的 80port
$sudo nmap 遠端IP  -p 80
ex: sudo nmap 192.168.32.155 -p 80

掃描 遠端IP 的 all port
$sudo nmap 遠端IP  -p 1-65535
$sudo nmap 192.168.32.1 -p 1-65535

3.掃描 遠端IP 的port
$sudo nmap -Pn 192.168.32.155
ex sudo nmap -Pn 192.168.32.155

4.

資料來源:
1.3 種檢查遠端埠號是否開啟的方法
2.[轉貼] Linux 網路檢測工具-nmap 的用法
3.十条nmap常用的扫描命令

Xubuntu 16.04 apt-get update出現An error occurred during the signature verification.

An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://dl.google.com/linux/chrome/deb stable Release: 由於無法取得它們的公鑰,以下簽章無法進行驗證: NO_PUBKEY 6494C6D6997C215E
W: 無法取得 http://dl.google.com/linux/chrome/deb/dists/stable/Release.gpg,由於無法取得它們的公鑰,以下簽章無法進行驗證: NO_PUBKEY 6494C6D6997C215E
W: 某些索引檔未能下載。其已遭略過,或改為使用舊的。
1.重新取得 repo key from Google
$wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -

資料來源:
1.Ubuntu 更新錯誤 apt update error - "An error occurred during the signature verification"

2019年4月11日 星期四

利用 swoole 架設 websocket 簡單範例

資料來源1 開始實作。
老實說,很多程式碼看不懂,只是造本宣科而已。但還是將之記錄起來,至少是寫給自己看。
分成兩台。分成Server端與Client端。Server端IP:192.168.32.106,Client端IP:192.168.32.182
兩端檔案位置均放置在 /home/webadmin/html/ 下

1.首先是Server端,檔名為 swoole.php
<?php
// 建立 websocket 物件,監聽 192.168.32.106:8080 連接埠
$ws = new swoole_websocket_server("192.168.32.106", 8080);

// 監聽 WebSocket 連接打開事件
$ws->on('open', function ($ws, $request) {
    var_dump($request->fd, $request->get, $request->server);
    $ws->push($request->fd, "hello, welcome\n");
});

// 監聽 WebSocket 訊息事件
$ws->on('message', function ($ws, $frame) {
    echo "Message: {$frame->data}\n";
    $ws->push($frame->fd, $frame->data);
});

// 今天 WebSocket 連接關閉事件
$ws->on('close', function ($ws, $fd) {
    echo "client-{$fd} is closed\n";
});

$ws->start();
?>
2.程式碼完成後,在command line 打上
$php swoole.php
然後等待 client 端來接

3.接下來是 Client端,檔名為 client_swoole.html
<html>
<head>
    <title> client swoole test</title>
    <script>
        var wsServer = 'ws://192.168.32.106:8080';
        var websocket = new WebSocket(wsServer);
        websocket.onopen = function (evt) {
            console.log("Success to connect WebSocket Server");
        };
        websocket.onclose = function (evt) {
          console.log("Closed to connect WebSocket Server");
        };
        websocket.onmessage = function (evt) {
            console.log('The message which is recived  from the WebSocket Server is the: ' + evt.data);
        };
        websocket.onerror = function (evt,e) {
            console.log('Error: ' + evt.data);
        }
    </script>
</head>
<body>
</body>
</html>

4.程式碼打完,用瀏覽器開啟。

5.Server端的command line 會出現

6.Client端瀏覽器為chrome,利用開發人員工具,來看一些訊息

7.如何關閉Server端的服務
   開新的終端機,下指令
$ps -fC php
然後接著下
$kill 7070
就會出現訊息:
[2019-04-11 22:34:43 #7070.4] INFO Server is shutdown now


資料來源
1.php – swoole – 架設 websocket 簡單範例

phpstorm 2017 安裝 swoole-ide-helper 套件

1.下載swoole-ide-helper
$git clone https://github.com/wudi/swoole-ide-helper.git

2.開啟PHPStorm
$phpstorm

3.選擇External Libraries,按下滑鼠選擇右鍵。選擇Configure PHP Include Path

4.選擇下載好的swoole-ide-helper目錄,點選確定。

5.重啟phpstorm,打上 $ws = new ,就會出現

資料來源:
1.phpstorm增加swoole自動提示

2019年4月8日 星期一

在 xubuntu 16.04 apache2 php 7.2 環境下,安裝 swoole

安裝swoole 前,請更新系統與套件。其指令為
$sudo apt-get update
$sudo apt-get upgrade
更新系統與套件期間,會有一些錯誤訊息
錯誤訊息1錯誤訊息2
更新系統與套件後,就可開始swoole 安裝動作

1.安裝 aptitude php
$sudo apt-get install aptitude

2.安裝 php7.2-dev
$sudo aptitude install php7.2-dev


3.安裝 cmake gcc autoconf pcre make git
$sudo aptitude install cmake gcc autoconf pcre make git


4.下載swoole
$git clone https://github.com/swoole/swoole-src.git
此時的swoole-src 會在目前的使用者目錄下,即 /home/webadmin/

5.依序下指令
$cd swoole-src
$phpize

$./configure

$make
$sudo make install
此時會在 /home/webadmin/swoole-src/modules/ 出現 swoole.so

6.修改/etc/php/7.2/cli/php.ini 與 /etc/php/7.2/apache2/php.ini
將extension=/home/webadmin/swoole-src/modules/swoole.so 加入。
$sudo pico /etc/php/7.2/cli/php.ini

$sudo pico  /etc/php/7.2/apache2/php.ini

7.重啟 apache2
$sudo service apache2 restart

8.檢查php 模組列表
$php -m

資料來源:
1.PHP 的性能猛獸 - Swoole
2.php – swoole 安裝

xubuntu 16.04 執行 sudo apt-get update 時,出現Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh-cache > /dev/null; fi'

xubuntu 16.04 執行 sudo apt-get update 時,出現錯誤訊息如下:
AppStream 系統快取已更新,但偵測到一些錯誤可能導致中介資料遺失。請參考詳盡模式記錄瞭解更多資訊。
正在讀取套件清單... 完成
E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh-cache > /dev/null; fi'
E: Sub-process returned an error code
解決之道:
sudo pkill -KILL appstreamcli

wget -P /tmp https://launchpad.net/ubuntu/+archive/primary/+files/appstream_0.9.4-1ubuntu1_amd64.deb https://launchpad.net/ubuntu/+archive/primary/+files/libappstream3_0.9.4-1ubuntu1_amd64.deb

sudo dpkg -i /tmp/appstream_0.9.4-1ubuntu1_amd64.deb /tmp/libappstream3_0.9.4-1ubuntu1_amd64.deb


資料來源:
1.Ubuntu 16.04出现:Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi'

2019年4月4日 星期四

CentOS 7.6 minimal 如何加快網站速度


1.建好一個要連結的目錄,準備放虛擬磁碟
$sudo mkdir /mnt/ramdisk

2.用 mount 指令暫時性的掛載 RAM disk
$sudo mount -t tmpfs -o size=32M  tmpfs /mnt/ramdisk

3.編修 /etc/fstab 加入下行
$sudo pico /etc/fstab

tmpfs                   /mnt/ramdisk    tmpfs   rw,relatime,size=32M  0  0

4.馬上掛上來用(或是重開機)
$sudo mount -a

5.修改 php.ini 的 session 設定
$sudo pico /etc/php.ini
session.save_path = "/mnt/ramdisk"

6.重新啟動 Web
$sudo systemctl restart httpd

7.定期清理 /mnt/ramdisk 內的 session
   (1)先寫個shell,檔名為RamClear.sh
         $sudo touch RamClear.sh
         $sudo pico RamClear.sh
        檔名為RamClear.sh,其內容為
        #!/bin/bash
        /bin/umount /mnt/ramdisk
        /bin/mount -a
   (2)變更RamClear.sh 權限,並移動到 /bin/ 內
        $sudo chmod +x RamClear.sh
        $sudo mv RamClear.sh /bin/
   (3)設定每天凌晨清除session 資料
       $sudo crontab -e
         0 0 3 * * * /bin/RamClear.sh > /dev/null

資料來源:
1.常見的密技--加速Web網站運作
2.[Linux] 在 CentOS 7 上建立 RAM disk
3.網管者如何再加快學籍系統?
4.在Ubuntu下建立RAMdisk,以加快網頁讀取速度

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

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