【发布时间】: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