Массовое обновление свойств обьектов
Модератор: immortal
-
- Сообщения: 23
- Зарегистрирован: Сб сен 30, 2017 2:35 am
- Благодарил (а): 10 раз
- Поблагодарили: 0
Re: Массовое обновление свойств обьектов
Такой вопрос на засыпку, таким образом отправляются данные в виде ASCI представления массива строки, а можно ли как то отправлять данные в виде 16-ричного массива данных (array HEX) ?
-
- Сообщения: 23
- Зарегистрирован: Сб сен 30, 2017 2:35 am
- Благодарил (а): 10 раз
- Поблагодарили: 0
Re: Массовое обновление свойств обьектов
Update..Delphin писал(а):Такой вопрос на засыпку, таким образом отправляются данные в виде ASCI представления массива строки, а можно ли как то отправлять данные в виде 16-ричного массива данных (array HEX) ?
Решил таким способом:
$MSG = pack("N", 0xC0A801C8)
-
- Сообщения: 3006
- Зарегистрирован: Чт авг 21, 2014 8:28 am
- Откуда: Киров, Россия
- Благодарил (а): 400 раз
- Поблагодарили: 1753 раза
- Контактная информация:
Re: Массовое обновление свойств обьектов
Я такие ф-ии использую:Delphin писал(а):Решил таким способом:$MSG = pack("N", 0xC0A801C8)
Код: Выделить всё
echo bin2hex ('привет'); // строку в hex
echo hex2bin('d0bfd180d0b8d0b2d0b5d182'); // hex в строку
- Рейтинг: 1.16%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Мой CONNECT | Блоги | Telegram
- Lerych
- Сообщения: 191
- Зарегистрирован: Чт дек 14, 2017 8:46 pm
- Откуда: Московская область, Серпухов
- Благодарил (а): 79 раз
- Поблагодарили: 24 раза
Re: Массовое обновление свойств обьектов
А как тоже самое сделать для TCP протокола? Надо передавать строку на сервер в виде: 01011skysilver писал(а): ↑Пн ноя 20, 2017 11:53 amУ udp-протокола нет необходимости устанавливать соединение в отличие от tcp.Delphin писал(а):Т.е. мне нужно сделать коннект по этому сокету, отправку данных, и отключение от сокета.
Попробуй такой код:Код: Выделить всё
$ip = '192.168.1.45'; $port = '6000'; $timeout = 5; $sock = NULL; if (!($sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP))) { $errorcode = socket_last_error(); $errormsg = socket_strerror($errorcode); die("Ошибка создания сокета - [socket_create()] [$errorcode] $errormsg \n"); } else { echo 'Сокет успешно создан' . PHP_EOL; } if (!socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, array("sec" => $timeout, "usec" => 0))) { $errorcode = socket_last_error(); $errormsg = socket_strerror($errorcode); echo "Ошибка установки параметра SO_RCVTIMEO сокета - [socket_create()] [$errorcode] $errormsg" . PHP_EOL; } else { echo 'Параметр SO_RCVTIMEO сокета успешно задан' . PHP_EOL; } $msg = 'pt1=off'; if(!($bytes = socket_sendto($sock, $msg, strlen($msg), 0, $ip, $port))) { $errorcode = socket_last_error(); $errormsg = socket_strerror($errorcode); echo "Не удалось отправить данные в сокет [$errorcode] $errormsg" . PHP_EOL; } else { echo " >>>>> Отправлено в сокет $bytes байт" . PHP_EOL; }
Строка формируется из статусов устройств, с этим разобрался, всё работает. Код выше тоже работает, если сервер принимает UDP, но по TCP не хочет. Понимаю, что надо немного подругому организовать соединение, но опыта и знаний маловато. Помогите!
- Lerych
- Сообщения: 191
- Зарегистрирован: Чт дек 14, 2017 8:46 pm
- Откуда: Московская область, Серпухов
- Благодарил (а): 79 раз
- Поблагодарили: 24 раза
Re: Массовое обновление свойств обьектов
Пробовал менять
на
и строку
на
не даёт соединения.
Какие варианты?
Код: Выделить всё
if (!($sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP))) {
Код: Выделить всё
if (!($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP))) {
Код: Выделить всё
if(!($bytes = socket_sendto($sock, $msg, strlen($msg), 0, $ip, $port))) {
Код: Выделить всё
if(!($bytes = socket_sendto($sock, $msg, strlen($msg), 0, $ip, $port))){
Какие варианты?
- Lerych
- Сообщения: 191
- Зарегистрирован: Чт дек 14, 2017 8:46 pm
- Откуда: Московская область, Серпухов
- Благодарил (а): 79 раз
- Поблагодарили: 24 раза
Re: Массовое обновление свойств обьектов
Да-а уж, помощи не дождёшься!
Сделал в итоге такой скрипт "sendTCP":
Прицепил его к методу statusUpdated на Switch1,Switch2,Switch3 и теперь в другой программе по TCP протоколу получаю строку, типа: send_000,send_010,send_111 и т.п.
Также скрипт запускаю в ClockChime.onNewMinute.
Для этого в нём добавил:
Спасибо форумчане!
Сделал в итоге такой скрипт "sendTCP":
Код: Выделить всё
header('Content-Type: text/plain;'); //Мы будем выводить простой текст
set_time_limit(0); //Скрипт должен работать постоянно
ob_implicit_flush(); //Все echo должны сразу же выводиться
$address = '192.168.0.108'; //Адрес работы сервера
$port = 1985; //Порт работы сервера (лучше какой-нибудь редкоиспользуемый)
if (($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
//AF_INET - семейство протоколов
//SOCK_STREAM - тип сокета
//SOL_TCP - протокол
echo "Ошибка создания сокета";
}
else {
echo "Сокет создан\n";
}
$result = socket_connect($socket, $address, $port);
if ($result === false) {
echo "Ошибка при подключении к сокету";
} else {
echo "Подключение к сокету прошло успешно\n";
}
// $out = socket_read($socket, 1024); //Читаем сообщение от сервера
echo "Сообщение от сервера: $out.\n";
$relay1 = gg('Switch1.status');
$relay2 = gg('Switch2.status');
$relay3 = gg('Switch3.status');
$msg = 'send_'.$relay1.$relay2.$relay3;
echo "Сообщение серверу: $msg\n";
socket_write($socket, $msg, strlen($msg)); //Отправляем серверу сообщение
// $out = socket_read($socket, 1024); //Читаем сообщение от сервера
// echo "Сообщение от сервера: $out.\n"; //Выводим сообщение от сервера
// $msg = 'exit'; //Команда отключения
// echo "Сообщение серверу: $msg\n";
// socket_write($socket, $msg, strlen($msg));
// echo "Соединение завершено\n";
//Останавливаем работу с сокетом
if (isset($socket)) {
socket_close($socket);
echo "Сокет успешно закрыт";
}
Также скрипт запускаю в ClockChime.onNewMinute.
Для этого в нём добавил:
Код: Выделить всё
$s=date('s',time());
if ($s=="00") {
runScript('1socket_create');
}