Beste forumleden,
ik heb problemen met het ontvangen van replies op een UDP broadcast.
Ik verzend een udp broadcast vanuit een server, waarop de clients keurig antwoord geven op poort 6437
In eerste instantie gebruikte ik de functie "socket_recvfrom" omdat die mij , buiten de data, ook het ip adres van de antwoordende client geeft.
(wat ik nodig heb)
Alleen krijg ik met deze functie maar 1 client te pakken, terwijl ik met wireshark duidelijk meerdere zie antwoorden.
Ook meerdere malen socket_recvfrom voor een periode in een loop laten lopen helpt niet, ik zie maar 1 antwoord.
Als ik echter "socket_read" gebruik om de data van poort 6437 uit te lezen, zie ik wel alle data van alle antwoordende clients.
Is er iemand die weet hoe ik , buiten de data, ook alle ip adressen van de antwoordende clients kan zien?
thanks!
Code voor ontvangen udp broadcast:
$port = 6437; //receive port
//Create a UDP socket
if(!($sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP))) / open socket
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg \n");
}
socket_set_nonblock($sock); //nonblocking optie
// Bind the source address
if( !socket_bind($sock, "0.0.0.0" , $port) )
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not bind socket : [$errorcode] $errormsg \n");
}
stream_set_timeout($sock, 15); // stream timeout 15 sec
/*/////////////////////////optie socket_recvfrom//////////////////////////////////
$message="";
sleep(4); ... wait for replies
if(socket_recvfrom($sock, $buf, 2045,MSG_PEEK, $remote_ip, $remote_port)=== FALSE)
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not receive data: [$errorcode] $errormsg \n");
}
else
{
$message= $remote_ip." : Port: ". $remote_port."---- SN : ". $buf."\n"; // store remote ip / remote port /data
sleep(1);
}
*//////////////////////////////////////////////////////
//////////////////////// optie socket_read//////////////////////////////
$message="";
sleep(4);
for ($x = 0;$x <= 4; $x++)
{
sleep(1);
$message = $message.socket_read($sock, 64, MSG_PEEK);
}
1.697 views