接收的问题

a6965921
<?php

class iwanttolive extends Man\Core\SocketWorker
{
    /**
     * 确定包是否完整 return 0:完整 return X:还有X字节没有接收完
     */

    public function onStart()
    {
        echo'启动';
        global $suoyoushuju;
        $suoyoushuju=array();

    }
    public function dealInput($buffer)
    {
        // 如果最后一个字符是\n代表数据读取完整,返回0
        if($buffer === "\n")
        {
            return 0;
        }

        // 说明还有请求数据没收到,但是由于不知道还有多少数据没收到,所以只能返回1,因为有可能下一个字符就是\n
        return 1;
    }

    /**
     * 处理业务,当客户端数据接收完毕后触发(这里只是将客户端发来的字符串直接会写到客户端)
     */
    public function dealProcess($buffer)
    {

//        $bufferss=str_replace("\n","",$buffer);
        $bufferss=trim($buffer);
        global $suoyoushuju;
        $fanhui=array();
        array_push($suoyoushuju,$bufferss);
        echo '初始化所有数据';
        print_r($suoyoushuju);
        $ww=explode('&',$bufferss);
        $www=$ww;

        foreach ($suoyoushuju as $value) {
            echo '索引'.$www;
            echo '搜索范围'.$value;
            if(strpos($value, $www)!=-1)
            {

                array_push($fanhui,$value);
                echo'符合条件的放入$fangzhu数组';
                print_r($fanhui);

            }
            else
            {
                echo '没搜索到相应数据';
            }
        }

        return $this->sendToClient$fanhui);
    }

}

?>

比方说每次客户端发送字符串给服务端 1234&few
服务端接收后放到$suoyoushuju
然后来遍历$suoyoushuju 是否包含1234 如果有 就添加到$fanhui 这个再发回客户端
上面代码我运行了下。。。

明显没按照我的逻辑么第一次还会运行初始化 第二次发送就没有了。。。

4034 3 0
3个回答

walkor 打赏

你的程序中有两处错误

if(strpos($value, $www)!=-1)

strpos 永远不会返回-1,返回值只有可能false或者不小于0的整数

return $this->sendToClient$fanhui);

这句有语法错误
并且sendToClient参数只能是字符串,否则会报错

上面两个错误解决后通过telnet测试(我开的是7473端口)运行结果如下

telnet 127.0.0.1 7473
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
1234&few
array (
0 => '1234&few',
)1234&few
array (
0 => '1234&few',
1 => '1234&few',
)1234&few
array (
0 => '1234&few',
1 => '1234&few',
2 => '1234&few',
)

结果应该是你预期的

  • 暂无评论
a6965921
<?php

class iwanttolive extends Man\Core\SocketWorker
{
    /**
     * 确定包是否完整 return 0:完整 return X:还有X字节没有接收完
     */

    public function onStart()
    {
        echo'启动';
        global $suoyoushuju;
        $suoyoushuju=array();

    }
    public function dealInput($buffer)
    {
        // 如果最后一个字符是\n代表数据读取完整,返回0
        if($buffer === "\n")
        {
            return 0;
        }

        // 说明还有请求数据没收到,但是由于不知道还有多少数据没收到,所以只能返回1,因为有可能下一个字符就是\n
        return 1;
    }

    /**
     * 处理业务,当客户端数据接收完毕后触发(这里只是将客户端发来的字符串直接会写到客户端)
     */
    public function dealProcess($buffer)
    {

//        $bufferss=str_replace("\n","",$buffer);
        $bufferss=trim($buffer);
        global $suoyoushuju;
        $fanhui=array();
        array_push($suoyoushuju,$bufferss);
        echo '初始化所有数据';
        print_r($suoyoushuju);
        $ww=explode('&',$bufferss);
        $www=$ww;

        foreach ($suoyoushuju as $value) {
            echo '索引'.$www;
            echo '搜索范围'.$value;
            if(strpos($value, $www)!=false)
            {

                array_push($fanhui,$value);
                echo'符合条件的放入$fangzhu数组';
                print_r($fanhui);

            }
            else
            {
                echo '没搜索到相应数据';
            }
        }

        return $this->sendToClient(json_encode($fanhui));
    }

}

?>

还是不行
启动启动启动启动启动初始化所有数据

Array
(
     => 2134&dw
)

索引2134搜索范围2134&dw符合条件的放入$fangzhu数组

Array
(
     => 2134&dw
)

初始化所有数据

Array
(
     => 2134&dw
     => 12345&fe
)

索引12345搜索范围2134&dw符合条件的放入$fangzhu数组

Array
(
     => 2134&dw
)

索引12345搜索范围12345&fe符合条件的放入$fangzhu数组

Array
(
     => 2134&dw
     => 12345&fe
)

为什么第二次 初始化所有数据这个不会运行了

效果也是错的

输入12345&fe 应该是

array
(
     => 12345&fe
)

索引12345搜索范围12345&fe符合条件的放 如

=> 2134&dw 这个2134明显没符合条件怎么也放入了

  • 暂无评论
walkor 打赏

这句有问题,

if(strpos($value, $www)!=false)

应该是

if(strpos($value, $www)!==false)

  • 暂无评论
年代过于久远,无法发表回答
×
🔝