Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Принять данные по UDP с помощью PHP
Форумы портала PHP.SU » » Работа с сетью » Принять данные по UDP с помощью PHP

Страниц (1): [1]
 

1. Alt.F4 - 25 Апреля, 2011 - 21:06:25 - перейти к сообщению
Добрый день.
Есть ли возможность принять некоторые переменные с помощью PHP пришедшие на сервер по UDP протоколу?
Т.е. по TCP (вернее по HTTP) принимаем/передаем, например, GET'ом, а вот как сделать подобное, но по UDP.
Спасибо.
З.Ы. передающая сторона - GPRS модем.
2. Мелкий - 25 Апреля, 2011 - 21:25:03 - перейти к сообщению
http://ru.php.net/manual/en/func...ocket-create.php и компания.
И http://ru.php.net/manual/en/book.stream.php посмотрите, не помню, умеет ли он UDP или только TCP.
3. Alt.F4 - 25 Апреля, 2011 - 21:41:16 - перейти к сообщению
socket и компания просит айпи для соединения по UDP. Это исключено, у GPRS модема динамический айпи, а использовать dyndns нет возможности.
По streams ничего не нашел...
4. Haron - 26 Апреля, 2011 - 04:23:19 - перейти к сообщению
Ну во-первых - у Вас не динамический IP, а NAT - ибо модем GPRS.
Во вторых на роутере провайдера - должен быть проброшен порт, для приёма UDP-пакетов. UDP инкапсулирован в IP, и необходимость доступного порта никто не отменял.

Так что с GPRS-модемом - забейте и не парьтесь.
(Добавление)
Мда, и ещё, покурите про протокол UDP на википедии, ибо "использование UDP для обхода ограничений провайдера" - не более чем миф.
5. Alt.F4 - 30 Апреля, 2011 - 12:32:45 - перейти к сообщению
Цитата:
на роутере провайдера - должен быть проброшен порт, для приёма UDP-пакетов.
Так ведь мне передавать надо с GPRS-модема, а не принимать.

Что-то никак не выходит запустить соккет UDP на PHP.
Или не те порты использую. У хостера открыто мало, но в принципе какая разница если толкать все в 80?
Пример взял отсюда http://ua.php.net/manual/en/func...ocket-server.php .
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. $socket = stream_socket_server("udp://'IP_сервера':80", $errno, $errstr, STREAM_SERVER_BIND);
  3. if (!$socket) {
  4.    die("$errstr ($errno)");
  5. }
  6.  
  7. do {
  8.    $pkt = stream_socket_recvfrom($socket, 1, 0, $peer);
  9.    echo "$peer\n";
  10.    stream_socket_sendto($socket, date("D M j H:i:s Y\r\n"), 0, $peer);
  11. } while ($pkt !== false);
  12.  
  13. //Затем $pkt сохраняю в БД
  14. ?>
  15.  
Пробую передавать через терминалку "Hercules" (поддерживает UDP соединение) http://www[dot]hw-group[dot]com/products[dot][dot][dot]es/index_en[dot]html
Но в результате ничего в БД не появляется...
Подскажите пожалуйста, где ошибка.
Спасибо.
6. Мелкий - 30 Апреля, 2011 - 14:43:16 - перейти к сообщению
Alt.F4 пишет:
Так ведь мне передавать надо с GPRS-модема, а не принимать.

Alt.F4 пишет:
Есть ли возможность принять некоторые переменные с помощью PHP пришедшие на сервер по UDP протоколу?

Вы себе противоречите. Вероятно, не понимаете принципов сетевой передачи данных.
Варианта 2:
0) скрипт инициирует подключение куда-то:
достаточно знать только протокол (TCP | UDP), IP и порт машины, с которой надо соединиться. (ну и чтобы файрволы по пути не резали)
1) к скрипту будут подключаться:
обязателен открытый маршрут до скрипта (если требуется подключаться через интернет - публичный IP или проброшенный с маршрутизатора(ов) порт)

Alt.F4 пишет:
какая разница если толкать все в 80?

Огромная. Есть UDP порт 80 и есть TCP порт 80, они не пересекаются. И файрволл их может блокировать независимо друг от друга.

 

Powered by ExBB FM 1.0 RC1