繁体   English   中英

如何使PHP服务器读取刚刚创建的套接字?

[英]How do you make your PHP server read your socket you just created?

我正在制作PHP套接字服务器,但无法使服务器读取套接字。

    $this->log("Creating socket (please wait)...");

    $this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if(socket_bind($this->socket, "127.0.0.1", 8080) === false){
        $this->log("Failed to bind socket to port (8080)");
        exit();
    }
    socket_listen($this->socket, 5);

    if(!is_resource($this->socket)){
        $this->log("Socket isn't a resource. Something went wrong, exiting.");
        exit();
    }

    $this->log("Socket created, creating socket reader...");
    $this->socketReader = new SocketReader($this);

    $this->log("server started");

    //socket should be non-blocking
    socket_set_nonblock($this->getSocket());

    //called every 10000 microseconds to read socket (error line here)
    public function process(){
        $buffer = socket_read($this->getSocket(), 128);
        var_dump($buffer);,
    }

我得到的错误是:

`Warning: socket_read(): unable to read from socket [57]: Socket is not connected` when calling proccess().

为什么是这样? 套接字已成功创建,但是在尝试读取潜在的传入数据时出错。

您需要调用socket_accept()来为传入的连接获取一个新的套接字,然后从中读取。

//called every 10000 microseconds to read socket
public function process(){
    $connection = socket_accept($this->getSocket());
    if ($connection) {
        socket_set_nonblock($connection);
        $buffer = socket_read($connection, 128);
        var_dump($buffer);
        socket_close($connection);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM