Почему 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 во всех комбинациях клиента и сервера, так здорово!

Другие вопросы по тегам