c # — отправляет Hex с php на устройство, используя socket_sendto

Я провел дни, пытаясь понять это. У меня есть устройство GPS-трекера, которое общается по протоколу UDP.
И у меня есть шестнадцатеричная строка, которую я должен отправить на этот трекер:
«0d0a2a4b5700440002000000000000002a4b572c4e5230394230353330342c3030372c3034333133392c3023000000000000000000000000000000000000000000000d0a» Если я посылаю эту строку с помощью C #, устройство отвечает назад. Код C #:

public static byte[] StringToByteArray(String hex)
{
int NumberChars = hex.Length / 2;
byte[] bytes = new byte[NumberChars];
using (var sr = new StringReader(hex))
{
for (int i = 0; i < NumberChars; i++)
bytes[i] =
Convert.ToByte(new string(new char[2] { (char)sr.Read(), (char)sr.Read() }), 16);
}
return bytes;
}// Send Message to tracker
public static void send(string ip, string port, string msg)
{
Byte[] sendBytes = StringToByteArray(msg);
try
{
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(ip), int.Parse(port));
UDPreceiver.Send(sendBytes, sendBytes.Length, ipEndPoint);
Program.form1.addlog("Sent: " + ByteArrayToString(sendBytes) + " - to " + ip + " on port: " + port);
}
catch (Exception e)
{
MessageBox.Show(e.ToString(), "error");
}
}

Теперь, если я попытаюсь отправить ту же самую шестнадцатеричную строку из PHP. Устройство не отвечает, вот код php:

// Function send
function send($ip,$port,$message){
$socket_bytes = false;
try {
// Prepare message
$strlen = strlen($message);
$message = hex2bin(strtoupper($message));
// Send Packet
if(!($this->socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP))){
die('msg,could not create socket');
}
$socket_bytes = socket_sendto($this->socket, $message, $strlen, 0, $ip, $port);
socket_close($this->socket);
}catch(Exception $e){
return false;
}
return $socket_bytes;
}

Я исчерпал себя, пытаясь понять, как отправить это. Пожалуйста, любая помощь будет очень признательна.

1

Решение

Я не уверен но

strlen ($ message)! = strlen (hex2bin (strtoupper ($ message)));

$message = 'ABCD';
echo strlen($message); //==4
echo "\n";
echo strlen(hex2bin(strtoupper($message))); //==2
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]