2015-11-05 146 views
2

我想创建如下: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我需要的是一个小例子开始。

回答

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); 
+0

我已经试过上面的例子。我现在可以发送命令!但是当我尝试接收它进入无限循环? –

+0

'while(1)'设置一个无限循环作为* listener *。您发送的任何命令都必须在循环之外完成,否则必须添加逻辑以根据需要发送命令。@DanielSerban –

+0

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; } ------但没有成功。你能否给我提供一个例子。 –