MSMQを使用してC#サーバーにNMEAメッセージを送信しようとしています。このNMEAメッセージ(文字列)は、base64でエンコードされ、バイト配列として送信されます。バイト配列にヌル値を挿入する原因は何ですか?
私はに実行している問題は、MSMQで私のバイト配列として表示されていることである。
03 00 00 00 00 00 00 00 ........
3C 00 00 00 00 00 00 00 <.......
01 00 00 00 00 00 00 00 ........
03 00 00 00 00 00 00 00 ........
3F 00 00 00 00 00 00 00 ?.......
01 00 00 00 00 00 00 00 ........
03 00 00 00 00 00 00 00 ........
78 00 00 00 00 00 00 00 x.......
は私が探しているものに反対する:
3C 3F 78 6D 6C 20 76 65 <?xml ve
72 73 69 6F 6E 3D 22 31 rsion="1
2E 30 22 3F 3E 0D 0A 3C .0"?>..<
62 61 73 65 36 34 42 69 base64Bi
私のコードのサンプルを:
# base64 encode the message
b64_nmea = base64.b64encode(nmea)
# Adding xml prolog.. used by the server
b64_nmea = '<?xml version="1.0"?>..<base64Binary>' + b64_nmea + '==</base64Binary>'
# creates a byte array from b64_nmea
bytearray_nmea = bytearray(b64_nmea)
# Then to send the message:
qinfo = win32com.client.Dispatch("MSMQ.MSMQQueueInfo")
computer_name = os.getenv('COMPUTERNAME')
qinfo.FormatName = "direct=os:" + computer_name + "\\Private$\\test"
queue = qinfo.Open(2, 0)
msg = win32com.client.Dispatch("MSMQ.MSMQMessage")
msg.Label = "test"
msg.Body = bytearray_nmea
msg.Send(queue)
queue.Close()
私の質問は:これらのNULL値は来るのかバイト配列の作成時にエラーが発生したか、またはMSMQへのディスパッチのための私のメソッドがウォンキーになっていますか?
私はbytearray()
でかなりのバリエーションを試しました。上記のコードは、あまり「極端な」試みに戻っています。どんな洞察にも感謝します。
この問題は、メッセージをキューに入れるexeでsubprocess.Popen()
を使用することで解決できますが、Pythonのみを使用したソリューションを用意することは素晴らしいことです。
、私は(最初の)これらをよく見ます
、
これらの行は安全なようで、合理的なようですそのような 'nmea'変数です。異なる変数を使用し、意味のある名前を付けてください。 – Barmar
うまくいけば、これはもう少し明確です。 – Infoblack
私は実際の問題を手伝うことができればと願っています。 – Barmar