2009-03-26 41 views
5

Làm cách nào để gửi dữ liệu bằng PHP tới địa chỉ IP qua UDP?Làm cách nào để gửi dữ liệu bằng PHP tới địa chỉ IP qua UDP?

Tôi làm cách nào để có thể đọc lại dữ liệu đó trên máy tính khác?

<?php 
$fp = pfsockopen("udp://192.168.1.6", 9601, $errno, $errstr); 

if (!$fp) 
{ 
    echo "ERROR: $errno - $errstr<br />\n"; 
} 
socket_set_timeout ($fp, 10); 

$write = fwrite($fp, "kik"); 
//$data .= fread($fp,9600); 
//echo "$data<br>"; 
fclose($fp); 
echo "<br>Connection closed ..<br>"; 

if (!$write) { 
    echo "error writing to port: 9600.<br/>"; 
    next; 
?> 

Mã này gửi "kik" bằng chương trình tôi có thể đọc trên máy tính khác, nhưng làm cách nào tôi có thể xem nó trên trình duyệt?

+2

Viktor, xin vui lòng đăng lại câu hỏi thứ hai của bạn như là một câu hỏi khác nhau. –

Trả lời

0

Tôi nghĩ bạn sẽ thấy rằng PHP's socket reference là một nơi tốt để nghiên cứu về chủ đề này.

7

Kiến thức PHP của tôi hơi bị gỉ nên tôi đã thực hiện một số tìm kiếm để tìm một số hướng dẫn và hướng dẫn tốt. Cái này PHP Sockets Made Easy có vẻ như đó sẽ là một hướng dẫn khởi động tốt cho bạn.

Chỉnh sửa: Bài viết gốc tôi đã đăng không đi sâu vào chi tiết cho UDP vì vậy tôi đã loại bỏ mã trước đó. Các bài viết từ PHP Manual có một số thông tin đặc biệt liên quan đến UDP:

<?php 
$socket = stream_socket_server("udp://127.0.0.1:1113", $errno, $errstr, STREAM_SERVER_BIND); 
if (!$socket) { 
    die("$errstr ($errno)"); 
} 

do { 
    $pkt = stream_socket_recvfrom($socket, 1, 0, $peer); 
    echo "$peer\n"; 
    stream_socket_sendto($socket, date("D M j H:i:s Y\r\n"), 0, $peer); 
} while ($pkt !== false); 

?> 

Chỉnh sửa # 2: Dưới đây là một useful tutorial cho lập trình socket trong PHP. Nó chủ yếu là TCP nhưng nó bao gồm một phần về cách thay đổi mã để sử dụng UDP thay thế.

+2

Đó là máy chủ TCP - OP yêu cầu máy khách UDP ... –

+0

Adam Davis: Cảm ơn vì điều đó. Tôi sẽ tiếp tục làm thêm một số nhãn cầu. Tôi biết bài viết nói trên - một số về UDP. – TheTXI

+0

Aw, đây là một cách tốt hơn câu trả lời của tôi. Bây giờ tôi ghen tị và hờn dỗi. –

1

Chỉ cần kéo đoạn này ra khỏi một số mã làm việc tôi có



if (!socket_bind($sh, LISTENIP, LISTENPORT)) exit("Could not bind to socket"); 

while (TRUE) { 
    // $z = socket_recvfrom($sh, $data, 65535, 0, $connectip, $connectPort); 
    while(socket_recvfrom($sh, $data, 65535, 0, $connectip, $connectPort)) { 
     $pid = pcntl_fork(); 
     if ($pid == -1) { 
      die('could not fork'); 
     } else { #START ELSE COULD FORK 
      $PIDS[$pid] = $pid; //KEEP TRACK OF SPAWNED PIDS 
      if ($pid) { 
       //PARENT THREAD : $ch is a copy that we don't need in this thread 
      } else { 
       /** CHILD THREAD::BEGIN PROCESSING THE CONNECTION HERE! **/ 
       include "include/child_thread.inc.php"; 
      } //Child Thread 
     }//if-else-forked 

     /** CLEANUP THE CHILD PIDs HERE :: "Any system resources used by the child are freed." **/ 
     foreach ($PIDS as $pid) pcntl_waitpid($pid,$status,WNOHANG); 

     $i++; //INCREASE CONNECTION COUNTER 
    }//While socket_accept 


    /** CLEANUP THE PARENT PIDS **/ 
    foreach ($PIDS as $pid) { 
     $returnPid = pcntl_waitpid($pid,$status); 
     unset($PIDS[$pid]); 
    } 
}//While True 

+3

Ví dụ điển hình về máy chủ forking, nhưng tôi nghĩ OP là sau ứng dụng khách UDP ... –

+0

oops, quên bao gồm phần gửi (đây là phần dễ) socket_sendto ($ sh, $ packet, strlen ($ gói), 0x100, $ connectip, $ dest_port) – Eddy

0
<?php 
$server_ip = '127.0.0.1'; 
$server_port = 43278; 
$beat_period = 5; 
$message  = 'PyHB'; 
print "Sending heartbeat to IP $server_ip, port $server_port\n"; 
print "press Ctrl-C to stop\n"; 
if ($socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)) { 
    while (1) { 
    socket_sendto($socket, $message, strlen($message), 0, $server_ip, $server_port); 
    print "Time: " . date("%r") . "\n"; 
    sleep($beat_period); 
    } 
} else { 
    print("can't create socket\n"); 
} 
?> 
Các vấn đề liên quan