2011-01-21 53 views

回答

4

一個簡單的例子,如何發送原始的UDP數據包

<?php 
$frame = array(
    array(1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1), 
    array(1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1), 
    array(1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1), 
    array(1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1), 
    array(1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1), 
    array(1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1), 
    array(1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1), 
    array(1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1) 
); 

send_frame($frame, 1500); 

/** 
* Sends 18x8 MCUF-UDP packet to target host. 
* 
* see also: 
* wiki.blinkenarea.org/index.php/MicroControllerUnitFrame 
* 
* @param array $frame 18x8 '0' or '1' 
* @param int $delay delay in msec 
* @param string $host target host 
* @param int $port target port (udp) 
*/ 
function send_frame($frame, $delay, $host="192.168.0.23", $port=2323) { 
    $header = "\x23\x54\x26\x66\x00\x08\x00\x12\x00\x01\x00\xff"; 
    $buf = $header; 
    for ($i=0;$i<8;$i++) { 
     for ($j=0;$j<18;$j++) { 
      if ($frame[$i][$j]) { 
       $buf.="\xff"; 
      } else { 
       $buf.="\x00"; 
      } 
     } 
    } 
    $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); 
    socket_sendto($socket, $buf, strlen($buf), 0, $host, $port); 
    socket_close($socket); 
    usleep($delay*1000); 
} 
?> 
+0

感謝您的示例。我在php.net上看到了它,但在詢問我猜之前,我必須先嚐試一下。 – Shade 2011-01-22 13:12:53