2017-11-01 11 views
0

PHPからCに渡す必要があるコードについて助けが必要です。 このコードでは、SOCKET経由でリモートデバイスに命令を送信できます。 PHPで完璧に動作しますが、C言語に変換する必要があります。PHPのpack()関数を除いてすべて正常ですが、C言語で置き換える方法はわかりません。基本的に私はこれを渡す必要があります:文字列を16進数から2進数のCのSOCKETに変換する

$message = pack("H2H8H2H4H4", "a5", "00000001", "5e", "0000", "bc19"); 

mesaje_in_c =¿?

私はあなたに感謝します。ありがとう!

これは、PHPのコードです:

<?php 

$host = "192.168.0.140"; 
$port = 8081; 
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
if ($socket === false) { 
    print "socket_create() falló: razón: " . socket_strerror(socket_last_error()) ."\n"; 
} else { 
    print "create socket OK.\n"; 
} 

socket_set_option(
    $socket, 
    SOL_SOCKET, // socket level 
    SO_RCVTIMEO, // timeout option 
    array(
    "sec"=>10, // Timeout in seconds 
    "usec"=>0 // I assume timeout in microseconds 
    ) 
); 

// connect to server 
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n"); 
if ($result === false) { 
    print "socket_connect() falló.\nRazón: ($result) " . socket_strerror(socket_last_error($socket)) . "\n"; 
} else { 
    print "connect to server OK.\n"; 
} 

$message = pack("H2H8H2H4H4", "a5", "00000001", "5e", "0000", "bc19"); 
echo "Message To server Bin: ".$message."\n"; 
echo "Message dec: "; 
print_r(unpack("H*", $message))."\n"; 

// send string to server 
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n"); 

// get server response 
$result = socket_read($socket, 1024) or die("Could not read server response\n"); 

print "Reply From Server Bin:".$result."\n"; 

$resultHex = unpack("H*", $result); 
print "Reply From Server Hex:"; 
print_r($resultHex)."\n"; 

// close socket 
socket_close($socket); 
?> 

そして、これが終了するCコードです:

#include<stdio.h> 
#include<winsock2.h> 
#pragma comment(lib,"ws2_32.lib") //Winsock Library 

int main(int argc , char *argv[]){ 

    WSADATA wsa; 
    SOCKET s; 
    struct sockaddr_in server; 
    char *message , server_reply[2000]; 
    int recv_size; 

    printf("\nInitialising Winsock..."); 
    if (WSAStartup(MAKEWORD(2,2),&wsa) != 0) 
    { 
     printf("Failed. Error Code : %d",WSAGetLastError()); 
     return 1; 
    } 

    printf("Initialised.\n"); 

    //Create a socket 
    if((s = socket(AF_INET , SOCK_STREAM , 0)) == INVALID_SOCKET) 
    { 
     printf("Could not create socket : %d" , WSAGetLastError()); 
    } 

    printf("Socket created.\n"); 


    server.sin_addr.s_addr = inet_addr("192.168.0.140"); 
    server.sin_family = AF_INET; 
    server.sin_port = htons(8081); 

    //Connect to remote server 
    if (connect(s , (struct sockaddr *)&server , sizeof(server)) < 0) 
    { 
     puts("connect error"); 
     return 1; 
    } 

    puts("Connected"); 

    //Send some data 
    message = "a5000000015e0000bc19"; 
    // ???? message = pack("H2H8H2H4H4", "a5", "00000001", "5e", "0000", "bc19"); 

    if(send(s , message , strlen(message) , 0) < 0) 
    { 
     puts("Send failed"); 
     system("pause"); 
     return 1; 
    } 
    puts("Data Send\n"); 

    //Receive a reply from the server 
    if((recv_size = recv(s , server_reply , 2000 , 0)) == SOCKET_ERROR) 
    { 
     puts("recv failed"); 
    } 

    puts("Reply received\n"); 

    //Add a NULL terminating character to make it a proper string before printing 
    server_reply[recv_size] = '\0'; 
    puts(server_reply); 

    system("pause"); 
    return 0; 
} 

私はあなたが私を与えることができる支援をいただければ幸いです、ありがとう!

答えて

0

動作しますか?

char message[] = "\xa5\x00\x00\x00\x01\x5e\x00\x00\xbc\x19"; 
+0

こんにちはフルガース、助けてくれてありがとう。 それは私のために動作しません、デバイスはコマンドを認識しません。 私はすでにいくつかの組み合わせを試しています – Alexander

関連する問題