我正在接收通过 UDP 发送到我的服务器的数据包。我正在使用 socket_read 来读取数据,它运行得很好。但是我遇到了一个错误。在我的例子中,socket_read 的长度参数并不总是相同的。数据长度的范围可以是 50-150 字节。保持不变的一件事是数据集以 \x00 字节结束。如何让读取函数始终读取直到遇到该字节?我已经尝试过 PHP_NORMAL_READ 标志,但文档说它仅以 \n 或 \r 结尾,这确实不是我想要的(尝试过它对我的数据不起作用)。同时,socket_read 的 php 页面在length参数说明,
最大读取字节数为
由长度参数指定。
否则,您可以使用 \r、\n 或 \0 来
结束阅读(取决于类型
参数,见下文)。
该类型没有提及 /0 字节。就像缺少一份文档一样。我需要的是一个函数,它可以让我为数据指定分隔符,也可以自动从可用的套接字读取所有数据。 socket_recv 函数中可能有一个解决方案,但它没有文档记录,我不知道它是如何工作的。
提前致谢。
如果我理解正确的话,您想从套接字读取数据,直到没有更多数据可供读取,问题是数据量是可变的,您不知道何时停止。
根据相关手册页(http://php.net/socket_read http://php.net/socket_read):
注意:socket_read() 返回零
长度字符串(“”),当没有
更多数据需要阅读。
您应该能够通过逐字节读取来处理可变长度数据,直到遇到零长度字符串:
while (($currentByte = socket_read($socket, 1)) != "") {
// Do whatever you wish with the current byte
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)