Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Соединение с демоном из PHP скрипта

41K
09 сентября 2012 года
Govard
28 / / 26.10.2011
Всем привет!
В начале я даже не знал, в каком разделе задать вопрос, и поскольку в моей проблеме всего понемногу, я зашел в раздел Linux. Итак, по теме.

Когда-то давно мне понадобилось осуществить запуск демона, слушающего какой-то порт, принимающего строки и отвечающего строками. Ну, как понадобилось... причуда, может, но речь не об этом. Я воспользовался вот этим материалом. В итоге, демон запускался, делал, что нужно, принимал, отвечал, но только при соединении из консоли:

 
Код:
~ $ telnet localhost 8080
Из PHP скрипта соединение тоже устанавливалось, но когда я отсылал данные в порт, демон их не получал, а когда пытался прочесть ответ, скрипт просто намертво вис.

Тогда я забил на все это дело. Сейчас решил сделать тоже самое, но воспользовался вот этим, довольно простым материалом. И, к сожалению, эффект тот же: через консоль - пожалуйста, через PHP - зависание наглухо.

Вопрос, в общем, очевиден. Как правильно на языке PHP создать сокет, соединиться с этим демоном, отправить ему строку и получить строку в ответ? И можно ли вообще так сделать с этим демоном?
41K
09 сентября 2012 года
Govard
28 / / 26.10.2011
Жутко извиняюсь, я кретин.

Код:
#!/usr/bin/env php
<?php

set_time_limit(0);
ob_implicit_flush();

$address =  'localhost';
$port    =  8080;
$msg     =  "info";
$msg     .= "\n\r\n\r";

if (($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
    print "Ошибка создания сокета";
} else {
    print "Сокет создан\n";
}

$result = socket_connect($socket, $address, $port);
if ($result === false) {
    echo "Ошибка при подключении к сокету";
} else {
    echo "Подключение к сокету прошло успешно\n";
    socket_write($socket, $msg, strlen($msg));
    $out = socket_read ($socket, 128);
    echo $out;
}

if (isset($socket)) {
    socket_close($socket);
    print "Сокет успешно закрыт\n";
}
?>
Добавил $msg .= "\n\r\n\r"; и все заработало, естественно.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог