如何使用PHP将字节流发送到套接字?

如何使用PHP将字节流发送到套接字?,php,sockets,tcp,Php,Sockets,Tcp,在GO中,我可以执行以下操作: conn,:=net.Dial(“tcp”,CONNECT)//客户端 请求:=[]字节{01,00}//请求以0100开头 request=append(请求,[]字节(`09302020073014323720200730007402`)…)//请求 控制写入(请求) 这确实有效,但是,我无法将其转换为PHP 到目前为止,我所拥有的: $fp=stream\u socket\u客户端(“tcp://x:x”,$errno,$errstr,5); 如果(!$f

在GO中,我可以执行以下操作:

conn,:=net.Dial(“tcp”,CONNECT)//客户端
请求:=[]字节{01,00}//请求以0100开头
request=append(请求,[]字节(`09302020073014323720200730007402`)…)//请求
控制写入(请求)
这确实有效,但是,我无法将其转换为PHP

到目前为止,我所拥有的:

$fp=stream\u socket\u客户端(“tcp://x:x”,$errno,$errstr,5);
如果(!$fp){
回显“$errstr($errno)
\n”; }否则{ $queryString='01000930202007301432327200730007402'; fwrite($fp,$queryString); echo fgets($fp,$responseSize); fclose($fp); }

我尝试使用描述的解决方案,但没有成功,服务器无法识别我的输入。

在Go示例中,您的请求以字节
0x01
0x00
开始。在PHP中,您正在编写字符串
'0100'
的字节编码。这些不完全相同,您可以在此处查看它们的不同之处:

您真正想要写入的是单字节0x0,而不是这些字符,而是字符串开头的0x1

使用PHP的内置代码,我们可以使用单个字节0x0和0x1创建字符串,如下所示:

$queryString=chr(0)。chr(1);
$queryString.='09302020073014323720200730007402'

除非PHP方面有任何额外的编码问题,否则这应该与您的Go示例中的查询相匹配。

您可以检查
fwrite
的返回值以查看写入是否确实成功吗?此外,您的查询字符串很可能被序列化为字符串而不是二进制,因此不会将第一个字符识别为字节
[]字节{01,00}
@JohnOss嘿,John!写入成功后,我从Brevity的代码中删除了错误处理。程序将不同的数据写入连接。Go程序以两个字节0,1开始。PHP程序以四个字节48、49、49、49开始。其余的数据是相同的。