2009-03-26 16 views
5

Come posso inviare dati con PHP a un indirizzo IP via UDP?Come posso inviare dati con PHP a un indirizzo IP via UDP?

Come posso ricevere quei dati sull'altro computer?

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

Questo codice invia il "kik" con un programma posso leggere sul un altro computer, ma come posso vederla nel browser?

+2

Viktor, si prega di ri-pubblicare il tuo seconda domanda come una domanda diversa. –

risposta

7

La mia conoscenza di PHP è un po 'arrugginita, quindi ho fatto qualche ricerca cercando di trovare delle buone guide e tutorial. Questo PHP Sockets Made Easy sembra una buona guida di avviamento per te.

Modifica: L'articolo originale che ho pubblicato non è andato molto bene per UDP, quindi ho eliminato il codice precedente. L'articolo dal PHP Manual ha qualche informazione in più specificamente per quanto riguarda 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); 

?> 

Modifica # 2: Ecco un altro useful tutorial per la programmazione socket in PHP. È principalmente TCP ma include una sezione su come alterare il codice per usare invece UDP.

+2

Questo è un server TCP - l'OP chiede un client UDP ... –

+0

Adam Davis: Grazie per quello. Continuerò a fare più occhio. So che l'articolo di cui sopra parla, a proposito di UDP. – TheTXI

+0

Aw, questa è una risposta migliore della mia. Sono tutto geloso e stanco ora. –

1

appena tirato fuori questo frammento di un codice di lavoro ho



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

Bel esempio di server biforcarsi, ma penso che l'OP sia dopo un client UDP ... –

+0

oops, dimentica di includere una porzione di invio (questa è la parte facile) socket_sendto ($ sh, $ packet, strlen ($ pacchetto), 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"); 
} 
?> 
Problemi correlati