Проверка работы fread на локальной машине

chama

Новичок
Проверка работы fread на локальной машине

Недавно только начал разбираться с сокетами. Покопался на php.net, в форуме. Нашел код который слегка изменил следуя соображениям того как я понимаю как должно это работать.

PHP:
$fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr);
 if (!$fp) {
    echo "ERROR: $errno - $errstr<br />\n";
 } else {
    $size = fwrite($fp, "dffffffff<br>\n");
echo $size;
    echo fread($fp, $size);
    fclose($fp);
 }
Я так понимаю: Открывется сокет с локалхостом по udp трансп. протоколу на 13 порт. Если возникла ошибка, то вывести строку с пояснениями ошибки, дальше посыслаю в сокет собщение dffffffff<br>\n , чиатаю из сокета это же сообщение размером $size, и пытаюсь его вывести.
Но получаю лишь количество байт(14) посланных по этому сокету.
Хочу узнать в чем я ошибаюсь или что не учел.
 

SiMM

Новичок
> Но получаю лишь количество байт(14) посланных по этому сокету.
А что ты ожидал увидеть?

> Хочу узнать в чем я ошибаюсь или что не учел.
Недочитал мануал, наверно.
 

chama

Новичок
Автор оригинала: SiMM
> Но получаю лишь количество байт(14) посланных по этому сокету.
А что ты ожидал увидеть?
Ожидал увидеть в окне браузера dffffffff<br>(на экране только dffffffff), но не получив данного сообщения расстроился.

> Хочу узнать в чем я ошибаюсь или что не учел.
Недочитал мануал, наверно.
перечитав мануал про fwrite и fgets не нашел причину, поэтому и попросил помощи разобраться в форуме.
 

Z.O.S.

Новичок
Автор оригинала: chama
Ожидал увидеть в окне браузера dffffffff<br>(на экране только dffffffff), но не получив данного сообщения расстроился.

а разве браузер <br> отображать должен????
 

chama

Новичок
Извиняюсь неправильно выразился
dffffffff<br>(на экране только dffffffff)
как раз и означает что браузер должен вывести dffffffff, а dffffffff<br> это то что по моему он дожен был послать броузеру, но я неполучил ничего этого на экран.
 

chama

Новичок
Автор оригинала: md5hash
chama

а view source this page после этого смотреть не пробовал :)
Да это не важно. Вы уж меня совсем за чайника то не держите. Трудность только в том что, когда я отправляю по сокету сообщение я не могу его тут же получить.
 

SiMM

Новичок
> Ожидал увидеть в окне браузера dffffffff<br>
На каких основаниях?

> перечитав мануал про fwrite и fgets не нашел причину
А при чём здесь они?
[m]fsockopen[/m]

> Трудность только в том что, когда я отправляю по сокету сообщение я не могу его тут же получить.
О5 25. А почему ты решил, что ты его вообще должен получить в клиенте?
 

chama

Новичок
Я прочитал то что я раньше неучел:
UDP sockets will sometimes appear to have opened without an error, even if the remote host is unreachable. The error will only become apparent when you read or write data to/from the socket. The reason for this is because UDP is a "connectionless" protocol, which means that the operating system does not try to establish a link for the socket until it actually needs to send or receive data. что udp протокол без установление соединения, поэтому открытие сокета может происходить без ошибки.
От сюда у меня возникли следующите вопросы.
Необходимо ли мне вешать на серверере(в данном случае на localhost) демон(либо используя чистый php открыть сокет и привязать к порту и установить режим ожидания, либо использовав inetd передавать поток в исполняемый скрипт), чтобы получить или отправить сообщение по сокету? Если да, то какой из пособов предпочесть и почему?
 

chama

Новичок
Кроме побаловаться есть и другая задача.
На сервере с помощь select infile и tar с gzip создаю архивы баз данных(каждый день). Есть желание и необходимость копировать на другой сервер. И для того что бы разобраться выбрал работу с сокетам(можно было к примеру это сделать по ftp или по http).
Есть идея, но пока нериализованная это сделать используя применяя следующий код в input.php:
PHP:
$fp= fopen(date("Ymd").".tgz","w");
if (fwrite($fp,file_get_contents('php://input'))) {
echo "Загрузка завершена. ";}
я так понимаю для этого надо либо запускать скрипт по http через apache(удаленно), либо через inetd:
в /etc/services
my 4005/tcp #my alias process
тогда в inetd.conf что то типа
my stream tcp nowait root /usr/local/bin/php php -f /home/i/input.php
Т.е. при соединении к серверу по 4005 порту и отсылке данных все данные запишутся в date("Ymd").".tgz". А ответ клиенту должен прийти "Загрузка завершена".
Вопросы про права на файл и про закрытые порты здесь не актуальны.
 
Сверху