You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:51:15