PHP kullanarak kaynak UDP bağlantı noktasını belirtmek için bir yolu var mı?

1 Cevap php

Ben uzak bir ekipman UDP üzerinden bir mesaj göndermek gerekiyor. Ben sunucuya bilgi gönderiyor iken ona geri mesaj yazmak için kullanılan aynı UDP bağlantı noktasını kullanacak eğer geçer biliyorum.

Şu anda kullanıyorum:

        $fp = fsockopen( $destination, $port, $errno, $errstr);
        if (!$fp) {
           echo "ERROR: $errno - $errstr\n";
        } else {
           fwrite($fp, $m);
           fclose($fp);
        }

Ama bu şekilde ben liman kaynak bağlantı noktası olarak kullanılan olacak olan hiçbir kontrole sahip.

Java birini kullanabilirsiniz var:

       client = new DatagramSocket(21000);

PHP kullanarak benzer bir şey yapmak için bir yolu var mı.

1 Cevap

Sen socket_create() ile normal bir udp soket oluşturma ve belirli bir bağlantı noktasına bağlamak için socket_bind() kullanarak bunu yapabilirdi. Daha sonra, örneğin kullanımı göndermek için bitiş noktası ve bağlantı noktasını belirtmek için socket_sendto. Örnek kod izler.

Kullanarak istemci port numarası ve IP adresi tükürür basit bir server socket_stream_server():

 <?php

 set_time_limit (20);

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

 do {
     $packet = 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 ($packet !== false);

 ?>

ve istemci bu gibi:

<?php

$address = '127.0.0.1';
$port = 50001;
$dest_address = '127.0.0.1';
$dest_port = 50000;

$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

if (socket_bind($sock, $address, $port) === false) {
    echo "socket_bind() failed:" . socket_strerror(socket_last_error($sock)) . "\n";
}

$msg = "Ping !";  
socket_sendto($sock, $msg, strlen($msg), 0, $dest_address, $dest_port);
socket_close($sock);

?>

(Komut satırında) sunucusunu çalıştıran istemci birden çok kez çalışan bu çıktıyı verir:

<knuthaug@spider php>php server.php
127.0.0.1:50001
127.0.0.1:50001
127.0.0.1:50001
^C
<knuthaug@spider php>