首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP Socket TCP 服務端與客戶端完整示例

     編輯:PHP 相關知識

基礎版:單次請求響應,反轉字符串

<?php
// socket_server.php
$host = "127.0.0.1"; $port = 1234;
set_time_limit(0);
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
socket_listen($socket, 3) or die("Could not set up socket listener\n");

$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
$input = socket_read($spawn, 1024) or die("Could not read input\n");
$input = trim($input);
$output = strrev($input) . "\n";
socket_write($spawn, $output, strlen($output)) or die("Could not write output\n");
socket_close($spawn); socket_close($socket);
?>

運行:php.exe socket_server.php,然後 telnet 127.0.0.1 1234 測試。

改進版:持續運行、處理多次讀寫

<?php
$commonProtocol = getprotobyname("tcp");
$socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);
socket_bind($socket, 'localhost', 1337);
socket_listen($socket);
$buffer = "NO DATA";
while (true) {
    $connection = socket_accept($socket);
    echo "Socket connected\r\n";
    if ($buffer !== "") {
        echo "Something is in the buffer...sending data...\r\n";
        socket_write($connection, $buffer . "\r\n");
        echo "Wrote to socket\r\n";
    } else { echo "No Data in the buffer\r\n"; }
    while ($data = socket_read($connection, 1024, PHP_NORMAL_READ)) {
        $buffer = $data;
        socket_write($connection, "Information Received\r\n");
        echo "Buffer: " . $buffer . "\r\n";
    }
    socket_close($connection);
    echo "Closed the socket\r\n\r\n";
}
?>

客戶端代碼

<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$connection = socket_connect($socket, 'localhost', 1337);
while ($buffer = socket_read($socket, 1024, PHP_NORMAL_READ)) {
    if ($buffer == "NO DATA") { echo "

NO DATA

"; break; } else { echo "

Buffer Data: " . $buffer . "

"; } } echo "

Writing to Socket

"; if (!socket_write($socket, "SOME DATA\r\n")) { echo "

Write failed

"; } while ($buffer = socket_read($socket, 1024, PHP_NORMAL_READ)) { echo "

Data sent was: SOME DATA
Response was:" . $buffer . "

"; } echo "

Done Reading from Socket

"; ?>

此示例展示了 Socket 的基本生命周期:創建、綁定、監聽、接受、讀寫、關閉。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved