php套接字发送数据然后接收数据

时间:2015-11-05 20:05:10

标签: javascript php html

我想创建以下内容:

  • 1.打开与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);
    }
 ?>
你可以帮我举个例子吗? 对于接收部分,我使用这个新代码:

$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函数。我需要的是一个小例子。

1 个答案:

答案 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);