【问题标题】:PHP socket_recv hex is 20byte but print emptyPHP socket_recv hex 为 20byte 但打印为空
【发布时间】:2014-05-05 14:21:06
【问题描述】:

我正在尝试与秤进行通信并发送数据。我正在使用wireshark 来捕获所有数据。在wireshark上,当我发送代码时,您可以看到数据下方返回的比例,但我无法使用socket_recv在php上返回相同的数据。

Wire Shark 接收到的数据: 10:01:00:00:00:00:00:14:01:00:00:00:00:01:00:01:00:00:00:00

我的 php 代码结果: Socket created Connection建立消息发送成功20(这是$buf的总字节) 如您所见, $buf 不是空的,它只是不打印它。 我的php代码

<?php
$address = "192.168.15.51";
$port = "8071";
$buf='';

if(!($sock = socket_create(AF_INET, SOCK_STREAM, 0)))
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Couldn't create socket: [$errorcode] $errormsg \n");
}

echo "Socket created \n";

//Connect socket to remote server
if(!socket_connect($sock , $address , $port))
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Could not connect: [$errorcode] $errormsg \n");
}

echo "Connection established \n";

$message = "\x10\x01\x00\x00\x00\x00\x00\xf2";
$message2 = "\x10\x01\x00\x00\x00\x00\x00\x00\x00\xe01 1,1,1,0,0,2,0,1000,0,2,0,1,,,,0,0,0,0,0,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,,,0,0,,,,,,2,,,0,0,2,1,0,0,0,0,0,0,1,0,3,0,0,0,0,,,0,\"\\x0d\\x0dtest1\",0,800,,0,0,,0,0,0,0,0,0,,,,,0,0,0,0,1,0,,0,0,0,0,0,0,0,0,0,1,,0,,,,0,0,,,,0,0,0,0,0,\x10\x01\x00\x00\x00\x00\x00\x00\x00\xe0 2,2,2,0,0,2,0,1000,0,2,0,1,,,,0,0,0,0,0,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,,,0,0,,,,,,2,,,0,0,2,1,0,0,0,0,0,0,1,0,3,0,0,0,0,,,0,\"\\x0d\\x0dplu2\",0,100,,0,0,,0,0,0,0,0,0,,,,,0,0,0,0,1,0,,0,0,0,0,0,0,0,0,0,1,,0,,,,0,0,,,,0,0,0,0,0,";

//Send the message to the server
if( ! socket_send ( $sock , $message , strlen($message) , 0))
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Could not send data: [$errorcode] $errormsg \n");
}
 if( ! socket_send ( $sock , $message2 , strlen($message2) , 0))
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Could not send data: [$errorcode] $errormsg \n");
}
echo "Message send successfully \n";

//Now receive reply from server
if(($byte=socket_recv ( $sock , $buf , 2045 , MSG_WAITALL )) === FALSE)
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Could not receive data: [$errorcode] $errormsg \n");
}

//print the received message
socket_close($sock);
echo $byte . "\n";


echo $buf . "\n";

【问题讨论】:

  • socket_recv()后面的$byte的内容是什么?您可能还想在调试时使用var_dump()print_r() 而不是echo
  • 我什至试过 echo (html_entity_decode($buf));

标签: php sockets networking tcp


【解决方案1】:

您永远不会初始化 $buf 变量。

将以下行放在您的socket_recv 调用之前的某处。

$buf = "";

【讨论】:

  • 我确实添加了但仍然没有什么不同,当我在 python 中尝试时它工作正常,我得到了我想要的结果。当我转换 hexdec($buf) 时,我得到 0 作为结果谢谢
猜你喜欢
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 2019-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多