Müssen Sie ein UDP-client Beispiel

Ich habe eine Segel-Timer Windfahne, überträgt Daten per UDP über ein WiFi-Netzwerk erstellt von der Windfahne hardware. Das system funktioniert einwandfrei, und ich kann die Daten Lesen über 3rd-party-Navigationssoftware INavX. Aber ich möchte in der Lage sein, um Lesen Sie den UDP-stream direkt über die PHP zum testen, und ich kann nicht mein script ausgeführt. Ich habe keine Vorherige Erfahrung mit UDP.

Ich weiß, die hardware und das Netzwerk sind, richtig funktionieren, weil die oben genannte software funktioniert einwandfrei. Auch kann ich sehen, die den Netzwerk-traffic in wireshark. Ich habe versucht zu Fragen, den Verkäufer um Hilfe, aber Sie sagten, Sie sind phasing mein Modell heraus, Sie wird nicht helfen, mich mit dem Modell, das ich habe, und ich sollte einen neuen kaufen. Aber der Kerl, der schrieb, die Navigations-software, sagte, es ist eine einfache Netzwerkverbindung ohne initiation strings oder nichts, "Nur an den port anschließen, und Sie sollten sehen Daten."

Was macht dieses ein bisschen anders als andere UDP-Beispiele, die ich gesehen habe, ist dies ist im wesentlichen "nur Zuhören" (ist es das, was ist Rundfunk?). Wenn ich versuche zum schreiben von Daten an den socket, bekomme ich ein "permission denied" - Fehler, weshalb ich die Angabe der ip und port in der socket_recvfrom Funktion.

Hier ist mein client-code in PHP:

<?php

# based on from http://www.binarytides.com/udp-socket-programming-in-php/

/*
    Simple php udp socket client
*/

//Reduce errors
error_reporting(~E_WARNING);

//network settings for the wind vane
$server = '255.255.255.255';
$port = 55554;
if( isset($argv[1]) ) $server = $argv[1];
if( isset($argv[2]) ) $port   = $argv[2];

if(!($sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)))
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Couldn't create socket: [$errorcode] $errormsg \n");
}



echo "Socket created \n";

//Bind the source address
if( !socket_bind($sock, "127.0.0.1" , 55554) )
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Could not bind socket : [$errorcode] $errormsg \n");
}


//Communication loop
while(1)
{

    //Now receive reply from server and print it
    if( ($bytesRead = socket_recvfrom ( $sock , $reply , 2045 , 0 , $server, $port )) === FALSE)
    {
        $errorcode = socket_last_error();
        $errormsg = socket_strerror($errorcode);

    if( ! in_array($errorcode, array(35) ) )
      die("Could not receive data: [$errorcode] $errormsg \n");
    }

    if( $bytesRead > 0 ) {
      echo "Reply : $reply";
    }
    usleep(500000);
}

InformationsquelleAutor Tim Herzog | 2015-05-16

Schreibe einen Kommentar