我想创建以下内容:
任务是:用户向设备发送命令,设备响应,我对收到的数据执行某些操作。 我有以下代码,但我认为我需要一个循环或一个while函数来等待接收的数据。 用户发送命令,但如果响应不是即时的,我必须等待它。或检查它。 我使用的是html,css和PHP 这是我使用的代码。
<?php
if(isset($_POST['btn_cmd']))
{
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_bind($sock, '127.0.0.1', 23);
$msg = "AT+BC=RTIME";
$len = strlen($msg);
socket_sendto($sock, $msg, $len, 0, '127.0.0.1', 23);
$from = '';
$port = 0;
socket_recvfrom($sock, $buf, 30, 0, $from, $port);
?>
<input type="text"
name="name3"
size="25"
maxlength="50"
value="<?php echo($buf); ?>">
<?php
socket_close($sock);
}
?>
你可以帮我举个例子吗?
对于接收部分,我使用这个新代码:
$out='';
echo "Reading response:\n\n";
//$out = socket_read($socket, 2048,PHP_NORMAL_READ) ;
while ($out=socket_recv($socket, $buf, 2048,PHP_NORMAL_READ)) {
echo "mesaj out:" .$out;
问题是我需要等待响应,上面的代码无效。我想我需要一个while函数或什么来做一个looop并等待响应然后关闭该循环。而且我不知道该怎么做。我已经尝试了所有接收和监听的php函数。我需要的是一个小例子。
答案 0 :(得分:2)
你的问题有点宽泛,但结果是你需要把一个监听器放在一个循环中。这是一个无限循环的例子:
// create a UDP socket
if(!($sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP))) {
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
file_put_contents('/var/log/udp.log', "Couldn't create socket: [$errorcode] $errormsg\n", FILE_APPEND);
}
// bind the source address
if( !socket_bind($sock, $localIP, 23) )
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
file_put_contents('/var/log/udp.log', "Could not bind socket: [$errorcode] $errormsg\n", FILE_APPEND);
}
// do some communication, this loop can handle multiple clients
while(1)
{
// receive some data
$r = socket_recvfrom($sock, $buf, 512, 0, $remote_ip, $remote_port);
$parsed_data = json_decode($buf); // assumes data is JSON
$now = date('Y-m-d H:i:s');
file_put_contents('/var/log/udp.log', "$now\t$buf\n", FILE_APPEND);
// do stuff with JSON you received
}
socket_close($sock);