Почему UDP-пакеты не отправляются с веб-страницы клиента на сервер с помощью PHP fsockopen?
Следующий код отправляет пакет UDP, когда я запускаю его с моего сервера Linux с адресом моего веб-клиента udp://192.168.1.107:2159. Однако, когда я вызываю ту же веб-страницу с клиента с адресом сервера Linux, указанным в коде, пакет UDP не отправляется. Я попробовал как ПК-клиент с Chrome, так и Mac-клиент с Safari. Также phpinfo() показывает, что allow_url_fopen имеет значение "On". Также я попробовал код без функции fflush().
Есть ли ограничения на клиентских веб-страницах и PHP-сокетах? Я не вижу, что это ищет в сети. Кстати, я написал приложение Java на том же клиентском компьютере, и оно без проблем отправляет пакет UDP на адрес и порт.
phpinfo();
$errno = 0;
$errstr = "";
$fsocket = fsockopen("udp://192.168.1.103:2195", $errno, $errstr);
if( !$fsocket ) {
echo "$errstr( $errno)<br/>\n";
} else {
$out = "Oh ya baby!\r\n";
fwrite( $fsocket, $out );
fflush( $fsocket );
fclose($fsocket);
}
2 ответа
Порт является вторым аргументом fsockopen()
, Он должен быть изолирован от имени домена. Как это:
$fsocket = fsockopen("udp://192.168.1.103", 2195, $errno, $errstr);
Проблема... Вы не можете всегда верить Wireshark! Я слишком доверял Wireshark. Я создал Java-приложение для получения от fsockopen пакетной передачи PHP через Интернет. К сожалению, Java перехватывает пакет, а Wireshark пропускает пакет - тоже каждый раз. Случай с Wireshark - это Mac (клиентский веб-вызов PHP), Linux (сеанс Wireshark и веб-сервер PHP).
Я не знаю, маркирует ли Wireshark пакет как-то еще или что-то неясное в сгенерированном PHP-пакете, что касается Wireshark? Странная вещь, когда я передаю один и тот же пакет из Java-приложения, Wireshark его ловит! Я не знаю всех причин, почему. Но я заставил PHP fsockopen работать, поэтому моя работа выполнена! Он работает между Linux и Mac OS 10 во всех комбинациях клиента и сервера, так здорово!