Соединение с демоном из PHP скрипта
В начале я даже не знал, в каком разделе задать вопрос, и поскольку в моей проблеме всего понемногу, я зашел в раздел Linux. Итак, по теме.
Когда-то давно мне понадобилось осуществить запуск демона, слушающего какой-то порт, принимающего строки и отвечающего строками. Ну, как понадобилось... причуда, может, но речь не об этом. Я воспользовался вот этим материалом. В итоге, демон запускался, делал, что нужно, принимал, отвечал, но только при соединении из консоли:
Код:
~ $ telnet localhost 8080
Тогда я забил на все это дело. Сейчас решил сделать тоже самое, но воспользовался вот этим, довольно простым материалом. И, к сожалению, эффект тот же: через консоль - пожалуйста, через PHP - зависание наглухо.
Вопрос, в общем, очевиден. Как правильно на языке PHP создать сокет, соединиться с этим демоном, отправить ему строку и получить строку в ответ? И можно ли вообще так сделать с этим демоном?
Код:
#!/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";
}
?>
<?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";
}
?>