我最近开始在 PHP 上练习套接字,但遇到了一个我找不到文档的问题。我在 C++ 中看到过类似的情况,但对此没有明确的答案。编码:
do {
$input = socket_read($client, 12,PHP_BINARY_READ);
echo $input;
} while(TRUE);
应该在套接字上阻塞(不包括用于创建、绑定等的代码)并获取 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 块,这是条件检查的原因。奇怪的'1'来自于此。如果我用我在上面发布的行替换它,则可以正常读取数据。事实上,即使是这样阅读:
$input = ($seq_ID == 0) ? socket_read($client,12,PHP_BINARY_READ) : socket_read($client, 12,PHP_BINARY_READ);
结果:第一次读取 = '1' 第二次读取 = 正确数据,第三次读取 = 正确数据..