PHP实现服务器和客户端

使用PHP的套接字编程

服务器

<?php
// 设置服务器监听的 IP 和端口
$host = '127.0.0.1';  // 使用本地回环地址
$port = 8080;         // 任意未被占用的端口

// 创建 TCP Socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket) {
    die('无法创建 socket: ' . socket_strerror(socket_last_error()));
}

// 绑定 IP 和端口
if (!socket_bind($socket, $host, $port)) {
    die('无法绑定地址: ' . socket_strerror(socket_last_error($socket)));
}

// 开始监听
if (!socket_listen($socket)) {
    die('无法监听端口: ' . socket_strerror(socket_last_error($socket)));
}

echo "服务器启动,正在监听 {$host}:{$port}...\n";

// 接受客户端连接
$clientSocket = socket_accept($socket);
if ($clientSocket === false) {
    die('无法接受连接: ' . socket_strerror(socket_last_error($socket)));
}

echo "客户端已连接...\n";

// 要发送的命令字符串
$command = "echo Hello, World!\r\nls -la";

// 解决字符串中的 /r 问题,替换为 /n
$command = str_replace("\r", "", $command);

// 发送命令到客户端
socket_write($clientSocket, $command, strlen($command));
echo "命令已发送到客户端...\n";

// 接收客户端返回的结果
$response = '';
while ($data = socket_read($clientSocket, 1024)) {
    $response .= $data;
}

echo "接收到客户端的响应:\n";
echo $response;

// 关闭连接
socket_close($clientSocket);
socket_close($socket);
?>

客户端

<?php
// 设置服务器的 IP 和端口
$host = '127.0.0.1';  // Windows 服务器的 IP 地址
$port = 8080;         // 与服务器匹配的端口号

// 创建 TCP Socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket) {
    die('无法创建 socket: ' . socket_strerror(socket_last_error()));
}

// 连接到服务器
if (!socket_connect($socket, $host, $port)) {
    die('无法连接服务器: ' . socket_strerror(socket_last_error($socket)));
}

echo "已连接到服务器...\n";

// 从服务器接收命令
$command = '';
while ($chunk = socket_read($socket, 1024)) {
    $command .= $chunk;
}

// 解决命令字符串中的 /r 问题
$command = str_replace("\r", "", $command);

echo "接收到的命令: {$command}\n";

// 执行命令并获取输出
exec($command, $output, $return_var);

// 将输出的结果发送回服务器
$result = implode("\n", $output);
socket_write($socket, $result, strlen($result));

// 关闭 socket 连接
socket_close($socket);
?>

运行步骤

  1. 运行服务器

    • 打开一个终端或命令行窗口,执行php server.php。服务器将开始监听来自客户端的连接。
  2. 运行客户端

    • 在另一个终端或命令行窗口,执行php client.php。客户端将连接到服务器,接收并显示服务器发来的命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值