如何在PHP中逐字节写入套接字?

如何在PHP中逐字节写入套接字?,php,sockets,byte,raw-sockets,Php,Sockets,Byte,Raw Sockets,如何在PHP中逐字节写入套接字 例如,我如何做以下事情: socket_write($socket,$msg.14.56.255.11.7.89.152,strlen($msg)+7); 伪码串联数字实际上是dec中的字节。希望您理解我。在PHP6之前,字节只是字符。写一个字符串与写一个字节数组是一样的。如果这些是ascii字符十进制值,您可以替换$msg。。。位与: $msg.chr(14).chr(56).chr(255).chr(11).chr(7).chr(89).chr(152)

如何在PHP中逐字节写入套接字

例如,我如何做以下事情:

socket_write($socket,$msg.14.56.255.11.7.89.152,strlen($msg)+7);

伪码串联数字实际上是dec中的字节。希望您理解我。

在PHP6之前,字节只是字符。写一个字符串与写一个字节数组是一样的。如果这些是ascii字符十进制值,您可以替换$msg。。。位与:

$msg.chr(14).chr(56).chr(255).chr(11).chr(7).chr(89).chr(152)
如果你能解释一下你想做什么,我们将更容易提供一个更有用的答案,但与此同时,这就完成了你到目前为止所描述的内容。

根据

你应该能做到

socket_write($socket,"$msg\x14\x56\x255\x11\x7\x89\x152",strlen($msg)+7);
您可以使用该函数将数据打包为您想要的任何数据类型。然后将其与任何函数一起发送

$strLen = strlen($msg);

$packet = pack("a{$strLen}C7", $msg, 14, 56, 255, 11, 7, 89, 152);

$pckLen = strlen($packet);

socket_write($socket, $packet, $pckLen);

你到底为什么要一个字节一个字节地写呢?你就不能写一个字节数组吗?好的,没错。但是如何写入字节数组呢?:)问题中的值为“十进制字节”(十进制)。\x####格式是十六进制值,因此这将给出错误的结果。谢谢Kevin和Earlz。您认为该解决方案对PHP6安全吗?现在我可以看到,它们终于在简单的ascii字符串上面移动了。所以只需将十进制值转换为十六进制。大多数东西在十六进制中可读性更好,因为除了十六进制或八进制外,你不能插入原始值,所以你可以选择。你说的安全是什么意思?PHP6引入了unicode,这意味着它将不再是1字节=1个字符。(某些)各种字符串函数的参数和返回值将发生变化,您的代码必须相应地更新。函数的在线文档描述了这些更改。是的,你是对的。我同意。使用utf8不应该受到字节->字符转换的影响,只要我们能够将其作为套接字另一侧的字节来读取。但是,将utf8字符串拆分回字节的“字节安全”方法究竟是什么呢?他们将添加函数subbyte:),这将允许我们通过字节而不是字符进行迭代谁投票反对每个人的答案?那真的很糟糕。谢谢你,马克。这个功能我不熟悉。这是一个非常有用的解决方案。看起来很安全——在另一边有解包功能:)Pack对我来说就像一个隐藏的功能,但一旦你找到它,它就是一块宝石。