Как я могу отправить данные с PHP на IP-адрес через UDP? - PullRequest
5 голосов
/ 27 марта 2009

Как я могу отправить данные с PHP на IP-адрес через UDP?

Как я могу получить эти данные на другом компьютере?

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

Этот код отправляет «кик» с программой, которую я могу прочитать на другом компьютере, но как я могу увидеть это в браузере?

Ответы [ 4 ]

7 голосов
/ 27 марта 2009

Мои знания PHP немного устарели, поэтому я занимался поиском, пытаясь найти хорошие руководства и учебные пособия. Этот PHP Sockets Made Easy , похоже, станет для вас хорошим руководством для начинающих.

Редактировать : Исходная статья, которую я разместил, не вдавалась в подробности UDP, поэтому я удалил предыдущий код. В статье из PHP Manual есть дополнительная информация, касающаяся 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);

?>

Редактирование # 2 : Вот еще один полезный учебник для программирования сокетов в PHP. В основном это TCP, но в нем есть раздел о том, как изменить код для использования UDP.

1 голос
/ 27 марта 2009

Только что вытащил этот фрагмент из рабочего кода, который у меня есть



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

0 голосов
/ 28 ноября 2013
<?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");
}
?>
0 голосов
/ 27 марта 2009

Я думаю, вы обнаружите, что ссылка на сокет PHP является хорошим местом для изучения этой темы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...