开发者社区> 问答> 正文

PHP数组神秘行为为“未定义索引”

我正在使用PHP中的流方法练习套接字编程。我正在使用PHP 7.3.11。我发现了非常意外的错误消息,其中显示“未定义索引”错误,其中

这是我的服务器端代码

        error_reporting(E_ALL);
        /* allow the script to hang around waiting for connection.*/
        set_time_limit(0);

        $address = '127.0.0.1';
        $port = 9016;
        $server = stream_socket_server($address .":". $port, $errno, $errorMessage);    
        $req = array( "R004"=>"R004 exist"
    , "R001" => "R001 Ruccess"
    , "R002"=>"R002Rcontinue"
    , "R003"=>"R003 lRquit"
    , "R005"=>"R005 hello");
        $res = array("TT","SOO1", "S002", "S003");
        if ($server === false)
        {
            throw new UnexpectedValueException("Could not bind to socket: $errorMessage");
        }

        echo json_encode($req);

        while($socket = stream_socket_accept($server)){
            $rand = rand(1,3);
            $peer =  stream_socket_get_name($socket, true);
            $pkt = stream_socket_recvfrom($socket, 1500, 0,$peer);
            if( !empty($pkt)){
                $pkt = trim(preg_replace('/\s+/','',$pkt));
                echo "pkt[{$pkt}]";
                echo "EXITS:".array_key_exists($pkt, $req)."\n";
                echo "pkt[{$pkt}]".PHP_EOL;
                echo $req[$pkt].PHP_EOL;
                stream_socket_sendto($socket, $res[$rand], 0, $peer);
            }
            fclose($socket);
            usleep(1000);
        }

        stream_socket_shutdown($server, \STREAM_SHUT_RDWR);

这是我的客户端代码

set_time_limit(0);

$address = '127.0.0.1';
$port = 9016;

$local = "tcp://{$address}:{$port}";

$socket = stream_socket_client($local, $errno, $errstr, 30);
$c_res = array("S001" => "Success", "S002" => "continue", "S003" => "quit");
$c_req = array("ROO3", "R005", "R002", "R001", "R004");

while ($socket = stream_socket_client($local, $errno, $errstr, 30)) {
    $rand = rand(1, 4);
//    echo "SEND[$c_req[$rand]]" . PHP_EOL;

    $sent = stream_socket_sendto($socket, $c_req[$rand] . PHP_EOL);

    if ($sent > 0) {
        usleep(1000);
        $s_res = stream_socket_recvfrom($socket, 1500, 0, $peer);
//        $s_res = fread($socket, 4096);
        $s_res = trim(preg_replace('/\s+/', '', $s_res));

        echo "c_res[{$s_res}]";
        echo "EXITS:" . array_key_exists($s_res, $c_res) . "\n";
        echo "c_res[{$s_res}]" . PHP_EOL;
        echo $c_res[$s_res] . PHP_EOL;
    }
}

stream_socket_shutdown($socket, STREAM_SHUT_RDWR);

当我同时运行此代码时,服务器和客户端(服务器先运行,然后客户端运行)

我发现了这种错误信息

PHP Notice: Undefined index: SOO1 in E:\xampp\htdocs\mave_gen\www\adm\client.php on line 29 我根本不理解此错误消息,因为除S001以外,所有其他参考都可以正常打印。显然,在代码中定义了S001。我在这里想念什么吗?

先感谢您。

展开
收起
社区秘书 2019-12-09 15:38:41 632 0
0 条回答
写回答
取消 提交回答
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载