Возможно ли работать с устройствами через php сокет ?

daxak

Новичок
Возможно ли работать с устройствами через php сокет ?

И так... Есть устройство у которого есть сетевой (tcp) интерфейс...
код следующий
PHP:
$PAKET = array(16,64,1,65,22);


for($i=0; $i<5; $i++){
print(" >".$DAT[$i]);
}


$fp = fsockopen('xxx.xxx.115.92', 2003, $errno, $errstr, 10); //Подсоединяемся к хосту "xxx.xxx.115.92" на 2003-й порт

if($fp)
{
print("Соединение создано");

    //Соединение создано
  if (fputs($fp, $PAKET)) {print("пакет отправлен");}else{print("ошибка записи в сокет");}
    
    echo '<pre>'; //Что бы нам было лучше видно заголовки, которые отдаст сервер
 //   while(!feof($fp)) echo fgets($fp); //Выводим ответ сервера
// В ЭТОТ МОМЕНТ УСТРОЙСТВО ДОЛЖНО ОТВЕТИТЬ "E5"(в hex формате) или "229"(в десятичном)
    echo '</pre>';
    
    fclose($fp); //Закрывем сокет

}else{print("нет соединения");}


Я знаю что это неправильно!
Данные необходимо посылать в бинарном формате т.е. массив должен быть типа byte , но в php не нашёл ничего подобного...
Может кто подскажет возможно ли вообще общаться с устройствами через php интерпретатор и как правильно это делать...
 

fixxxer

К.О.
Партнер клуба
пока не вышел php 6, смело считай строку "массивом типа byte" (потому что это так и есть).
 

h0kum

Новичок
используй
PHP:
# создаешь сокет
resource socket_create ( int domain, int type, int protocol )

# конектишься на своё устройство 
bool socket_connect ( resource socket, string address [, int port] 

# кидаешь ему пакет
int socket_write ( resource socket, string buffer [, int length] )
данные можешь сформировать так
$packet = pack("CCCCC",16,64,1,65,22);

# читаешь ответ
string socket_read ( resource socket, int length [, int type] )
принятую строку или распаковываешь через unpack() или просто bin2hex()
 

daxak

Новичок
И так... с начала ответ на ответы :)
фанат
Да. один могу... даже ошибок не возникает...

fixxxer
как только перехожу в массив, начинается Notice: Array to string conversion in C:\Program Files\Apache Group\root\2009\index.php on line 3

h0kum
пасибо конечно, но перл нам не подойдёт... желательно >php
_______________________________________________

Теперь песьня про зайцев...

вспомнил об операторе
pack - упаковывает данные в бинарную строку.(PHP 3, PHP 4)

получил следующее

PHP:
$PAK = array(16,64,1,65,22); 
$PAKET=pack("H",$PAK);


$fp = fsockopen('xxx.xxx.115.92', 2002, $errno, $errstr, 10); //Подсоединяемся к хосту "xxx.xxx.115.92" на 2003-й порт 

if($fp) 
{ 
print("Соединение создано<br />"); 

    //Соединение создано 
  if (fputs($fp, $PAKET)) {print("пакет отправлен <br />");}else{print("ошибка записи в сокет");} 
     
    echo '<pre>'; //Что бы нам было лучше видно заголовки, которые отдаст сервер 
    while(!feof($fp)) echo fgets($fp); //Выводим ответ сервера 
// В ЭТОТ МОМЕНТ УСТРОЙСТВО ДОЛЖНО ОТВЕТИТЬ "E5"(в hex формате) или "229"(в десятичном) 
    echo '</pre>'; 
     
    fclose($fp); //Закрывем сокет 

}else{print("нет соединения");}
---===> получаем

Notice: Array to string conversion in C:\Program Files\Apache Group\root\xxx\index.php on line 3
Соединение создано
пакет отправлен
_______________________________
НО ОТВЕТА НЕТ!!!
Fatal error: Maximum execution time of 100 seconds exceeded in C:\Program Files\Apache Group\root\2009\index.php on line 22

если $PAKET=pack("С",$PAK);
то вообще => Соединение создано
пакет отправлен
:) но ответа всё равно нет....
Fatal error: Maximum execution time of 100 seconds exceeded in C:\Program Files\Apache Group\root\2009\index.php on line 22

________________
H Hex-строка, сначала высший разряд
C беззнаковый char
________________

В чём проблемма?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
не то чтобы смешно, но продолжать не стоит точно

-~{}~ 10.03.09 07:54:

daxak, ты почитай документацию - разделы "синтаксис", "типы данных", строковые функции
изучи основы программирования, напиши простые скрипты
через год-два сможешь начинать писать сетевые приложения на сокетах
 

daxak

Новичок
кто-нибудь нормально ответит почему не стоит продолжать?
 

Фанат

oncle terrible
Команда форума
daxak
тебе невозможно объяснить. ты все равно не понимаешь.
тебе пишут "строку" - ты пихаешь массив.
тебе пишут пхп - ты говоришь перл.
тебе пишут pack - ты говоришь "а я вспомнил!".

а уж тот факт, что ты не отличаешь скаляр от массива и вовсе поставит все попытки объяснения в тупик.
 

daxak

Новичок
у меня нет столько времени! Срочно нужно перенести приложение на php формат!
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
к услугам вашей организации раздел "Работа", где можно разместить объявление о вакансии или разовой работе
профессионалы (и не очень) предложат свои услуги
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
главное - осознайте, что проблемы Вы сами не решите.
никак. без вариантов.
потом решите, готовы ли вы (или компания) за решение платить, и когда будете готовы - пишите объявление
вопросы в стиле предыдущих лучше не пишите - закроем
 

daxak

Новичок
ответ от устройства получен...
Всем спасибо...
Особенно h0kum
помогло $packet = pack("CCCCC",16,64,1,65,22);
 

h0kum

Новичок
Автор оригинала: daxak
ответ от устройства получен...
Всем спасибо...
Особенно h0kum
помогло $packet = pack("CCCCC",16,64,1,65,22);
пожалуйста
можно из без pack()
$packet="\x10\x40\x01\x41\x16"
 
Сверху