2009-03-26 106 views
5

¿Cómo puedo enviar datos con PHP a una dirección IP a través de UDP?¿Cómo puedo enviar datos con PHP a una dirección IP a través de UDP?

¿Cómo puedo recibir esos datos en la otra computadora?

<?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; 
?> 

Este código envía el "kik" con un programa que pueda leer en el otro equipo, pero ¿cómo puedo verlo en el navegador?

+2

Viktor, vuelva a publicar su segunda pregunta como una pregunta diferente. –

Respuesta

7

Mi conocimiento de PHP está un poco oxidado, así que he estado haciendo algunas búsquedas tratando de encontrar algunas buenas guías y tutoriales. Esta PHP Sockets Made Easy parece que será una buena guía de iniciación para usted.

Editar: El artículo original que publiqué no entró en gran detalle para UDP, así que eliminé el código anterior. El artículo de la PHP Manual tiene alguna información más específica respecto 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); 

?> 

Edición # 2: Aquí hay otro useful tutorial para la programación de sockets en PHP. Principalmente es TCP, pero incluye una sección sobre cómo alterar el código para usar UDP en su lugar.

+2

Ese es un servidor TCP - el OP está pidiendo un cliente UDP ... –

+0

Adam Davis: Gracias por eso. Voy a seguir mirando un poco más. Sé que el artículo anterior habla -alguno- sobre UDP. – TheTXI

+0

Aw, esta es una respuesta mucho mejor que la mía. Estoy celoso y malhumorado ahora. –

1

acaba de sacar este fragmento de un código de trabajo que tengo



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

Buen ejemplo de un servidor de bifurcación, pero creo que el OP es después de un cliente UDP ... –

+0

¡Uy !, olvide incluir una porción de envío (esta es la parte fácil) socket_sendto ($ sh, $ packet, strlen ($ paquete), 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"); 
} 
?> 
Cuestiones relacionadas