Моя цель : отправить UDP-сообщение в php. Сообщение должно быть строкой байта.
Это мой тестовый код
const TIMEOUT = 5;
const PORT = 8888;
const IP = "255.255.255.255";
const STR = "test";
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, 1);
socket_set_option($sock,SOL_SOCKET,SO_RCVTIMEO,array("sec"=>TIMEOUT,"usec"=>0));
socket_sendto($sock, STR, strlen(STR), 0, IP, PORT);
//wait the responses for TIMEOUT sec
while(true) {
$ret = @socket_recvfrom($sock, $buf, 20, 0, $ipDevice, $portDevice);
if($ret === false) break;
echo "-".$buf." - ".$ipDevice.":".$portDevice . "<br>";
}
socket_close($sock);
Но socket_sendto требуется параметр строки для отправки (моя переменная STR).
Итак, вопрос: Как я могу преобразовать строку (моя переменная STR) в строку байтов ?
Вот как вы можете сделать UDP-трансляцию:
<?php
$broadcast_string = "test";
$port = 1234;
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, 1);
socket_sendto($sock, $broadcast_string, strlen($broadcast_string), 0, '255.255.255.255', $port);
socket_close($sock);
?>
РЕДАКТИРОВАТЬ:
Вот как конвертировать string
в строку байтов:
$byte_array = unpack('C*', 'The quick fox jumped over the lazy brown dog');
var_dump($byte_array); // $byte_array should be int[] which can be converted
// to byte[] since values are range of 0 - 255
Других решений пока нет …