PHP套接字-有人可以向我解释这些功能吗?

色氨酸64

我正在尝试制作一个php套接字服务器,我发现了两个用于屏蔽和取消屏蔽文本消息(框架)的函数。我想我不太清楚它是如何工作的。这是功能:

//encode message for transfer to client
function mask($text)
{ 
    $b1 = 0x80 | (0x1 & 0x0f);
    $length = strlen($text);

    if ($length <= 125)
        $header = pack('CC', $b1, $length);
    elseif ($length > 125 && $length < 65536)
        $header = pack('CCn', $b1, 126, $length);
    elseif ($length >= 65536)
        $header = pack('CCNN', $b1, 127, $length);

    return $header . $text;
}

//unmask incoming framed message
function unmask($text)
{ 
    $length = ord($text[1]) & 127;
    if ($length == 126) {
        $masks = substr($text, 4, 4);
        $data = substr($text, 8);
    } elseif ($length == 127) {
        $masks = substr($text, 10, 4);
        $data = substr($text, 14);
    } else {
        $masks = substr($text, 2, 4);
        $data = substr($text, 6);
    }
    $text = "";
    for ($i = 0; $i < strlen($data); ++$i) {
        $text .= $data[$i] ^ $masks[$i % 4];
    }

    return $text;
}

我想我已经了解了:

mask转换消息的二进制表示形式,并根据消息长度创建正确大小的帧(通过连接标头)。(通过使用pack()添加字节对吗?)

揭露->反向过程。

我不明白的是:掩码中使用的$ b1变量的作用是什么?此代码的语法对我来说还不清楚。

$b1 = 0x80 | (0x1 & 0x0f);
瓜高

用这种方式写那条线有点奇怪,但这是发生了什么。&是二进制AND运算符,它采用两个值并仅返回匹配的位。0x1是00000001,0x0f是00001111(二进制)。

 00000001
&00001111
=00000001

因此(0x1&0x0f)只是0x1或1。

| 运算符类似于&,但是是二进制OR。如果任何一方的值为1,则结果将为1。0x80为01000000,因此

 01000000
|00000001
=01000001

因此,总结果为0x81。为什么不只写$ b1 = 0x81?我猜想这段代码的作者是从某些0x1部分是变量的C代码中复制出来的:

byte b1 = 0x80 | (someVariable & 0x0f);

在这种情况下,二进制&和0x0f确保仅使用someVariable的后4位,b1的前4位始终为0x8(根据帧规范,这可能是必需的)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有人可以向我解释为什么这些箭头函数中的关键字`this`在这些示例中以给定的值结尾

来自分类Dev

有人可以向我解释这个 php 数组中的“\”是做什么的?

来自分类Dev

有人可以解释不同类型的Unix域套接字吗?

来自分类Dev

Go中的多线程。有人可以向我解释这些答案吗?

来自分类Dev

有人可以向我解释haskell的功能

来自分类Dev

带有Android的PHP套接字

来自分类Dev

有人可以向我解释此代码吗?

来自分类Dev

有人可以向我解释什么是stty吗?

来自分类Dev

有人可以向我解释这种行为吗?

来自分类Dev

有人可以向我解释这段代码吗

来自分类Dev

有人可以解释指向我的指针吗

来自分类Dev

有人可以向我解释while循环在javascript getCookie()中的功能吗?

来自分类Dev

有人可以向我解释回调功能吗?

来自分类Dev

有人可以向我解释使用JS / jQuery创建网格的此功能吗?

来自分类Dev

在我的PHP脚本中找不到错误。有人可以向我指出

来自分类Dev

php mail()vs Yahoo:有人可以简单解释一下YAHOO从PHP邮件功能接收邮件的步骤吗?

来自分类Dev

PHP:有人可以解释此异常处理程序错误吗?

来自分类Dev

有人可以向我解释一下Java中的哨兵功能吗?或如何运作?

来自分类Dev

有人可以向我解释一下Java中的哨兵功能吗?或它是如何工作的?

来自分类Dev

有人可以帮我调试我的井字游戏吗?

来自分类Dev

有人可以向我解释我在R中的总和的问题吗

来自分类Dev

连接问题-有人可以向我解释我做错了什么吗?

来自分类Dev

可能有人解释这个功能我不小心写(“任意”关键字)?

来自分类Dev

有人可以向我解释fromMap()和fromSnapshot()

来自分类Dev

有人可以向我解释一下Java中的.getClass()方法吗?

来自分类Dev

有人可以向我解释为什么该按钮不起作用吗?

来自分类常见问题

有人可以用简单的术语向我解释Clojure换能器吗?

来自分类Dev

有人可以使用.bind()函数向我解释此代码吗?

来自分类Dev

有人可以向我解释此NASM计划的工作原理吗?

Related 相关文章

  1. 1

    有人可以向我解释为什么这些箭头函数中的关键字`this`在这些示例中以给定的值结尾

  2. 2

    有人可以向我解释这个 php 数组中的“\”是做什么的?

  3. 3

    有人可以解释不同类型的Unix域套接字吗?

  4. 4

    Go中的多线程。有人可以向我解释这些答案吗?

  5. 5

    有人可以向我解释haskell的功能

  6. 6

    带有Android的PHP套接字

  7. 7

    有人可以向我解释此代码吗?

  8. 8

    有人可以向我解释什么是stty吗?

  9. 9

    有人可以向我解释这种行为吗?

  10. 10

    有人可以向我解释这段代码吗

  11. 11

    有人可以解释指向我的指针吗

  12. 12

    有人可以向我解释while循环在javascript getCookie()中的功能吗?

  13. 13

    有人可以向我解释回调功能吗?

  14. 14

    有人可以向我解释使用JS / jQuery创建网格的此功能吗?

  15. 15

    在我的PHP脚本中找不到错误。有人可以向我指出

  16. 16

    php mail()vs Yahoo:有人可以简单解释一下YAHOO从PHP邮件功能接收邮件的步骤吗?

  17. 17

    PHP:有人可以解释此异常处理程序错误吗?

  18. 18

    有人可以向我解释一下Java中的哨兵功能吗?或如何运作?

  19. 19

    有人可以向我解释一下Java中的哨兵功能吗?或它是如何工作的?

  20. 20

    有人可以帮我调试我的井字游戏吗?

  21. 21

    有人可以向我解释我在R中的总和的问题吗

  22. 22

    连接问题-有人可以向我解释我做错了什么吗?

  23. 23

    可能有人解释这个功能我不小心写(“任意”关键字)?

  24. 24

    有人可以向我解释fromMap()和fromSnapshot()

  25. 25

    有人可以向我解释一下Java中的.getClass()方法吗?

  26. 26

    有人可以向我解释为什么该按钮不起作用吗?

  27. 27

    有人可以用简单的术语向我解释Clojure换能器吗?

  28. 28

    有人可以使用.bind()函数向我解释此代码吗?

  29. 29

    有人可以向我解释此NASM计划的工作原理吗?

热门标签

归档