gpt4 book ai didi

php - Socket_read 返回 '1' ..?

转载 作者:行者123 更新时间:2023-12-03 11:54:23 27 4
gpt4 key购买 nike

我最近开始在 PHP 上练习套接字,但遇到了一个我找不到文档的问题。我在 C++ 中看到过类似的情况,但对此没有明确的答案。编码:

do {
$input = socket_read($client, 12,PHP_BINARY_READ);
echo $input;
} while(TRUE);

应该在套接字上阻塞(不包括用于创建、绑定(bind)等的代码)并获取 12 个字节或从另一端可用的任何信息。

奇怪的是,如果读取了 12 个字节,我只会在变量 $input 中得到一个“1”。如果我从客户端发送超过 12 个字节,那么我会在 $input 的值中收到 '1[REST_OF_DATA]'。

知道为什么会这样吗?

如果我将其更改为更多数据和 PHP_NORMAL_READ,那么我将正确接收数据。

PHP手册在线没有说任何关于socket_read返回'1'的信息。

**编辑:好的,感谢您的早期回答:)。我正在保存到文件并读取(不回显到浏览器)期望任何字符。如果有 C++ 套接字知识的人可以验证,我想我可能刚刚发现了一些可能很好的东西。无论如何,我的阅读代码实际上是这样的(不是我上面发布的):
do {
$input = ($seq_id == 0) ? socket_read($client, 12,PHP_BINARY_READ) : socket_read($client,1024,PHP_BINARY_READ);
echo $input;
} while(TRUE);

我期待第一次读取时有 12 个字节,然后是 1024 block ,这是条件检查的原因。奇怪的'1'来自于此。如果我用我在上面发布的行替换它,则可以正常读取数据。事实上,即使是这样阅读:
$input = ($seq_ID == 0) ? socket_read($client,12,PHP_BINARY_READ) : socket_read($client, 12,PHP_BINARY_READ);

结果:第一次读取 = '1' 第二次读取 = 正确数据,第三次读取 = 正确数据..

最佳答案

12您指定的是要读取的最大长度,所以 12可以表示大小为 0-12 个字符的返回字符串(PHP 中的二进制字符串,1 char = 1 字节)。

另外因为它可以是二进制的,我建议你使用 var_dump以及返回字符串值的 hexdump 以实际找出返回了多少字节,echo 可能会隐藏一些控制字符,您的浏览器可能会隐藏空格。

关于php - Socket_read 返回 '1' ..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10076191/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com