使用socket_bind时如何解决PHP解析错误

31moq8wy  于 2022-12-10  发布在  PHP
关注(0)|答案(1)|浏览(261)

我想获取UDP数据包,所以我编写了以下代码:

<?PHP
error_reporting(-1);

$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

socket_bind($socket, '127.0.0.1', 2055);

$from = '192.168.1.2';
$port = 2055;

socket_recvfrom($socket, $buf, 12, 0, $from, $port);

while(1==1){
echo "Received $buf from remote address $from and remote port $port" . PHP_EOL;
}
?>

当我用PHP命令运行它时,我得到了这个错误:

PHP Parse error:  syntax error, unexpected single-quoted string "127.0.0.1", expecting ")" in C:\Users\ELAY\php on line 7

我用PHP 8、7.5、5.6进行了尝试

dohp0rv5

dohp0rv51#

试试这边

<?php
    
    // Create a socket resource
    $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
    
    // Bind the socket to an IP address and port
    $result = socket_bind($socket, '0.0.0.0', 1234);
    
    if ($result === false) {
        // Handle the error
        $errorCode = socket_last_error($socket);
        $errorMessage = socket_strerror($errorCode);
        echo "Failed to bind the socket: $errorMessage ($errorCode)\n";
    } else {
        // Read data from the socket
        $data = socket_read($socket, 1024);
        if ($data === false) {
            // Handle the error
            $errorCode = socket_last_error($socket);
            $errorMessage = socket_strerror($errorCode);
            echo "Failed to read from the socket: $errorMessage ($errorCode)\n";
        } else {
            // Do something with the data
            echo "Received data: $data\n";
        }
    }

在这段代码中,socket_bind函数被调用的地方有一个语法错误。这个函数的第二个参数应该是一个包含IP地址或主机名的字符串,但在这段代码中它是一个数字零。这将导致一个解析错误,因为PHP需要一个字符串,但它收到的是一个数字值。
若要修正此错误,您必须将socket_bind函数的第二个参数变更为有效的IP位址或主机名称。例如,您可以使用'127.0.0.1'将通信端系结至localhost位址,或者您可以使用网络的特定IP位址或主机名称。
修复此语法错误后,您的代码应该能够运行而不会遇到分析错误。然后,您可以继续从套接字读取数据并根据需要处理它。

相关问题