2015-11-05 144 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; } ------但沒有成功。你能否給我提供一個例子。 –