編程學習網 > 數據庫 > MongoDB > php socket編程入門例子
2020
04-09

php socket編程入門例子



服務端代碼server.php

<?php
//創建socket套接字
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

/**
 * 第一個參數說明:
 *  AF_UNIX(本機通信)
 * AF_INET(TCP/IP – IPv4)
 * AF_INET6(TCP/IP – IPv6)
 * 第二個參數說明:
 *  SOCK_STREAM(TCP流)
 * SOCK_DGRAM(UDP數據報)
 * SOCK_RAW(原始套接字)
 * 第三個參數說明:
 * 如果第二個參數選擇的是TCP,則傳遞SOL_TCP否則就SOL_UDP
 */

if (!$socket) {
    echo 'create socket error' . PHP_EOL;
} else {
    echo 'create socket success' . PHP_EOL;
}


/**
 * 因為一臺主機可能存在多個 ip 地址,所以你需要指定你的 socket 監聽的是哪一個,
 * 常用的值為 127.0.0.1,或者是監聽所有地址 0.0.0.0,
 * 那么這里可能有人不明白了,127.0.0.1 和 0.0.0.0 有啥區別呢?
 * 127.0.0.1 只是一個回環地址,只能用于本機訪問,說白了就是自己玩自己的,因為這個 ip 不對外部開放,所以別人也就無法訪問這個地址,
 * 所以如果你的服務器地址設置為 127.0.0.1,別人想要訪問,只能去屎吧。
 * 0.0.0.0 嚴格來說不算是一個 ip 地址,它的意思是本機的所有 IP 地址,都是我的,哈哈。
 */

//綁定ip和端口
$addr = '127.0.0.1';
$port = 8080;
if (socket_bind($socket, $addr, $port)) {
    echo 'bind addr success' . PHP_EOL;
} else {
    echo 'bind addr error' . PHP_EOL;
}

//監聽套接字
if (!socket_listen($socket)) {
    echo 'listen socket error' . PHP_EOL;
} else {
    echo 'listen socket success' . PHP_EOL;
}

//接受客戶端連接
$client = socket_accept($socket);

if (!$client) {
    echo 'socket_accept error' . PHP_EOL;
} else {

    echo 'socket_accept success' . PHP_EOL;

    //接受客戶端返回內容
    while (true) {
        //第一個參數是客戶端套接字   第二個參數從socket中獲取的數據 第三個參數是設置長度最多為 len 字節的數據將被接收。
        $bytesNum = socket_recv($client, $buffer, 100, 0);

        if (!$bytesNum) {
            echo "socket_recv  failed" . PHP_EOL;
            exit(1);
        } else {
            echo "content from client:" . $buffer . PHP_EOL;
        }
    }
}


客戶端代碼client.php

<?php

//創建socket套接字
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

//連接套接字
if (!socket_connect($socket, '127.0.0.1', 8080)) {
    echo 'socket connect error' . PHP_EOL;
    exit(1);
} else {

    while (true) {

        //阻塞進程獲取輸入內容
        $data = fgets(STDIN);

        //如果用戶輸入quit,那么退出程序 這里要去除下空格 因為回車會造成換行符
        if (trim($data) == 'quit') {
            socket_close($socket);
            break;
        }

        //發送數據給服務端
        socket_write($socket, $data);
    }
}

這里先運行php server.php,然后運行php client.php,然后輸入內容,服務端就能接受到了。

掃碼二維碼 獲取免費視頻學習資料

Python編程學習

查 看2022高級編程視頻教程免費獲取