PHP套接字发送数据,然后接收数据
问题描述:
我想创建如下:PHP套接字发送数据,然后接收数据
- 1.open到UDP或TCP连接
- 2.发送索姆数据到选定的IP地址
- 3.从选定的IP地址接收数据
- 4.捕获变量内的接收数据。
任务是:用户向设备响应的设备发送一个命令,并且我对接收到的数据做了一些处理。 我有以下代码,但我想我需要一个循环或一个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);
}
?>
u能请帮我用一个例子 用于接收部分我用这个新代码:
$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;
的问题是,我需要等待响应和上面的代码是不加工。我想我需要一个时间函数或什么来做一个循环,等待响应,然后关闭该循环。我不知道该怎么做。我已经尝试了所有的接收和监听php functions.all我需要的是一个小例子开始。
答
你的问题有点宽泛,但结果是你需要把一个监听器放在一个循环中。这是一个无限循环的例子:
// 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);
我已经试过上面的例子。我现在可以发送命令!但是当我尝试接收它进入无限循环? –
'while(1)'设置一个无限循环作为* listener *。您发送的任何命令都必须在循环之外完成,否则必须添加逻辑以根据需要发送命令。@DanielSerban –
Jay。首先感谢您的答复。我正在尝试使用此代码:------ $ out =''; echo“阅读回复:\ n \ n”; // $ out = socket_read($ socket,2048,PHP_NORMAL_READ); ($ out = socket_read($ socket,2048,PHP_NORMAL_READ)){ echo“mesaj out:”。$ out; } ------但没有成功。你能否给我提供一个例子。 –