2016-11-12 2 views
1

У меня есть следующий питона код для отправки шестнадцатеричных данных к сетевому устройству, используя сокет TCP и он работает отличноОтправка значения Hex над TCP сокет

import socket 
import binascii 

def Main(): 
    host = '192.168.2.3' 
    port = 8000 

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    s.connect((host, port)) 
    print 'connected' 
    message = '\x00\x01\x02\x01\x00\x12\x03\x6b\xd6\x6f\x01\x01\x00\x00\x02\x58\x69\x47\xae\x58\x69\x47\xae\x00' 
    s.send(message) 
    print 'sent command' 

    data = s.recv(1024) 
    s.close() 
    print type(data) 

    print binascii.hexlify(data) 

if __name__ == '__main__': 
    Main() 

Однако мне нужно преобразовать этот код в PHP и I не знаю, является ли это правильный способ представления данных шестигранные в PHP Я попытался запустить следующий код

<?php 

if(!($sock = socket_create(AF_INET, SOCK_STREAM, getprotobyname("tcp")))) 
{ 
    $errorcode = socket_last_error(); 
    $errormsg = socket_strerror($errorcode); 

    die("Couldn't create socket: [$errorcode] $errormsg \n"); 
} 

echo "Socket created \n"; 

//Connect socket to remote server 
if(!socket_connect($sock , '192.168.2.3' , 8000)) 
{ 
    $errorcode = socket_last_error(); 
    $errormsg = socket_strerror($errorcode); 

    die("Could not connect: [$errorcode] $errormsg \n"); 
} 

echo "Connection established \n"; 
//Is this proper representation of the hexadecimal data 
$message = '\x00\x01\x02\x01\x00\x12\x03\x6b\xd6\x6f\x01\x01\x00\x00\x02\x58\x26\x17\xf2\x58\x69\x47\xae\x00'; 

//Send the message to the server 
if(! socket_send ($sock , $message , strlen($message) , 0)) 
{ 
    $errorcode = socket_last_error(); 
    $errormsg = socket_strerror($errorcode); 

    die("Could not send data: [$errorcode] $errormsg \n"); 
} 

echo "Message send successfully \n"; 

//Now receive reply from server 
if(socket_recv ($sock , $buf , 2 , MSG_WAITALL) === FALSE) 
{ 
    $errorcode = socket_last_error(); 
    $errormsg = socket_strerror($errorcode); 

    die("Could not receive data: [$errorcode] $errormsg \n"); 
} 

//print the received message 
echo $buf; 

соединение успешно установлено с устройством, но правильно данные п Отправлено на устройство, иначе я получил бы ответ от устройства.

Заранее спасибо.

ответ

1

Попробуйте с помощью функции HEX2BIN отправить данные:

$message = hex2bin('000102010012036bd66f0101000002582617f2586947ae00'); 
+0

Да спасибо, что работал – Saad