0
PHP에서 C로 전달해야하는 코드가 필요합니다. 코드는 SOCKET을 통해 명령을 원격 장치로 보낼 수 있습니다. 그것은 PHP에서 나를 위해 완벽하게 작동하지만 C로 변환해야합니다. PHP의 pack() 함수를 제외한 모든 것이 괜찮습니다. C로 대체하는 방법을 알지 못합니다. 기본적으로이 값을 전달해야합니다 :문자열을 16 진수에서 2 진수로 변환하여 소켓 C에 넣습니다.
$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;
}
난 당신이 내게 줄 수있는 지원을 부탁드립니다, 감사합니다!
안녕하세요 Furgas, 도와 주셔서 감사합니다. 나를 위해 작동하지 않습니다, 장치가 명령을 인식하지 못합니다. 이미 여러 가지 조합을 시도했지만 아무 것도 없습니다. – Alexander