gpt4 book ai didi

php - php中的可变长度数据包

转载 作者:可可西里 更新时间:2023-10-31 23:12:35 26 4
gpt4 key购买 nike

我正在接收通过 UDP 发送到我的服务器的数据包。我正在使用 socket_read 来读取数据,并且一切正常。但是我遇到了一个错误。在我的例子中,socket_read 的长度参数并不总是相同的。数据的长度可以在 50-150 字节之间的任何范围内。保持不变的一件事是数据集以\x00 字节结尾。在遇到这个字节之前,如何让读取函数始终读取?我已经尝试过 PHP_NORMAL_READ 标志,但文档说它只以\n 或\r 结尾,这真的不是我想要的(试过它对我的数据不起作用)。同时,socket_read 的 php 页面在 length 参数描述中指出,

The maximum number of bytes read is specified by the length parameter. Otherwise you can use \r, \n, or \0 to end reading (depending on the type parameter, see below).

类型没有说明/0 字节。就像缺少一份文档一样。我需要的是一个函数,它要么让我为我的数据指定一个分隔符,要么自动从可用的套接字中读取所有数据。 socket_recv 函数中可能有一个解决方案,但它没有记录,我不知道它是如何工作的。

提前致谢。

最佳答案

如果我没理解错的话,你想从套接字中读取数据,直到没有更多数据可读,问题是数据量是可变的,你不知道什么时候停止。

根据相关手册页 ( http://php.net/socket_read ):

Note: socket_read() returns a zero length string ("") when there is no more data to read.

您应该能够通过逐字节读取直到遇到零长度字符串来处理可变长度数据:

while (($currentByte = socket_read($socket, 1)) != "") {
// Do whatever you wish with the current byte
}

关于php - php中的可变长度数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/493487/

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