将C#代码转为PHP:创建指定长度空字节数组并通过Socket发送
如何在PHP中创建指定长度的空字节数组并适配socket_send?
在PHP里没有像C#那样直接的byte[]类型,但我们可以用字符串来模拟空字节缓冲区,刚好能完美适配socket_send需要字符串参数的要求。下面是具体解决方法和完整代码实现:
1. 创建长度为10240的空字节缓冲区
你可以用str_repeat()函数重复生成空字节(chr(0))10240次,得到的字符串就等价于C#里的new byte[10240]:
$outputBuffer = str_repeat(chr(0), 10240);
chr(0)会生成ASCII值为0的空字节,重复10240次后就得到了长度为10240的空字节序列,完全匹配需求。
2. 适配socket_send并完成完整TCP客户端逻辑
结合你给出的部分代码,我们补全整个逻辑,对应C#里的连接、发送指定长度数据的操作:
<?php /* Create a TCP/IP socket. */ $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if (!$socket) { die("socket_create failed: " . socket_strerror(socket_last_error())); } // 连接目标服务器,对应C#的svr.Connect $connectResult = socket_connect($socket, '127.0.0.1', 8081); if (!$connectResult) { die("socket_connect failed: " . socket_strerror(socket_last_error($socket))); } // 创建长度为10240的空字节缓冲区 $outputBuffer = str_repeat(chr(0), 10240); $pkgLen = 11; // 对应C#里的发送长度 // 发送缓冲区前11个字节,对应C#的ns.Write(outputBuffer, 0, pkgLen) socket_send($socket, $outputBuffer, $pkgLen, 0); socket_close($socket); ?>
这里需要注意:
socket_send的第三个参数是要发送的字节数,传入$pkgLen=11就和C#里只发送缓冲区前11个字节的逻辑完全一致。- 加入了简单的错误处理,方便排查socket创建或连接时的问题。
内容的提问来源于stack exchange,提问作者Saad
相关产品推荐
相关产品推荐

