[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Работа с аппаратным сервером на PHP
Peter_1
Помогите пожалуйста.
Есть удвленное устройство подключенное к сети. Сервером выступает микросхема. Задача - на PHP
1. отправлять устройству команды (ASCII)
2. принимать ответы от сервера.

С первой задачей справляется код:
<?php
$fp = fsockopen("IP.AD.RE.SS", "PORT", $errno, $errstr, 30);
socket_set_blocking($fp, 0);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {
sleep(0.5);
fputs($fp,"Comand1");
sleep(2);
fputs($fp,"Comand2");

// while (!feof($fp)) {
// echo fgets($fp, 20);
// }

sleep(10);
fclose($fp);
if (!empty($page)) echo '<pre>'.$page.'</pre>';
echo '<pre>'.$page.'</pre>';
}

?>


проблема 2-ой задачи, как я понимаю в том что сервер шлет ответ (данные) сразу поле получения команды. Вот история обмена пакетов:
на сервер > Flags: SYN
от сервера < Flags: SYN ACK
> Flags: ACK
> Flags: PSH ACK (тут передается первая команда)
< Flags: ACK
< Flags: PSH ACK (уже тут сервер шлет часть ответа)
< Flags: PSH ACK (тут вторая часть ответа)

Команда -
fgets($fp, 20);
НЕ читает то что уже пришло на сокет, а отправляет на сервер новый пакет-запрос на чтение данных, на что сервер не может ответить т.к. данные он уже передал.
Собственно вопрос - можно ли добраться до ответа сервера (поместить его в переменную)??
В C++ Builder используя TClientSocket & TServerSocket - все работает идеально. При получении данных от сервера наступает событие ClientRead в котором я и получаю ответ сервера. Способен ли на это PHP?



Спустя 2 часа, 15 минут, 12 секунд (13.06.2011 - 12:06) memba написал(а):
Попробуйте воспользоваться более низким уровнем работы ссокетами в PHP, чем функция fsockopen.

Почитать простейший пример можно вот тут. Описание всех функций работы с сокетами можно найти в документации.

Спустя 3 часа, 18 минут, 35 секунд (13.06.2011 - 15:24) Guest написал(а):
Огромное спасибо!!! Ваш пример очень помог!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.