我正在接收通过 UDP 发送到我的服务器的数据包。我正在使用 socket_read 来读取数据,它运行得很好。但是,我遇到了错误。在我的例子中 socket_read 的长度参数并不总是相同的。数据的长度可以在 50-150 字节之间。保持不变的一件事是数据集以 \x00 字节结束。我如何让读取函数始终读取直到遇到这个字节?我已经尝试过 PHP_NORMAL_READ 标志,但文档说它只以 \n 或 \r 结尾,这确实不是我想要的(试过它对我的数据不起作用)。同时,socket_read的php页面在长度参数描述中指出,
读取的最大字节数由长度参数指定。否则,您可以使用 \r、\n 或 \0 来结束读取(取决于类型参数,请参见下文)。
该类型没有说明 /0 字节。它就像丢失了一份文档。我需要的是一个函数,它可以让我为我的数据指定一个分隔符,将自动从可用的套接字读取所有数据。socket_recv 函数中可能有一个解决方案,但它没有记录,我不知道它是如何工作的。
提前致谢。
如果我理解正确,您想从套接字读取数据,直到没有更多数据可供读取,问题在于数据量是可变的,您不知道何时停止。
根据相关手册页(http://php.net/socket_read):
注意:当没有更多数据要读取时,socket_read() 返回一个零长度字符串 ("")。
您应该能够通过逐字节读取直到遇到零长度字符串来处理可变长度数据:
while (($currentByte = socket_read($socket, 1)) != "") {
// Do whatever you wish with the current byte
}
Run Code Online (Sandbox Code Playgroud)