使用socket_sendto将十六进制从php发送到设备

时间:2014-10-14 14:28:11

标签: c# php sockets hex

我花了好几天试图解决这个问题。我有一个使用UDP协议进行通信的GPS跟踪器设备。 我有一个十六进制字符串,我需要发送到这个跟踪器: " 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 个答案:

答案 0 :(得分:0)

我不确定

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

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