如何解决如何将二进制数据从Google Chrome扩展程序发送到本机应用程序
我正在将数据从Google Chrome扩展程序发送到使用C#开发的本机应用程序,但是,这仅在我发送短文本消息时有效,而在数据为二进制(JSON编码)时则无效。
例如,要通过扩展名发送命令,我正在呼叫:
port.postMessage({ command: 'Rates',info: request.setRates });
其中port
是本地消息传递应用程序连接,而request.setRates
是{setRates: "framesPerSecond=15&audioBitrate=22050"}
在C#应用程序中,可以通过STDIN完美接收。
但是,如果我调用此指令:
port.postMessage(request.binaryStream);
request.binaryStream
是{"data":[26,69,223,163,66,134,129,1,247,129…122,235,208,2,56,64,163],"contentType":"x-media"}
的地方。
在本机应用程序中很难接收到。数据长度约为77 KB,在这种情况下,我收到类似0,215,214,171,175,125,107,95,94,250,190,181,........
的信息,当然,它是无效的JSON字符串。似乎正在产生某种类型的缓冲区溢出。
这怎么办?
编辑:
目前最后一次尝试是对数组进行base64编码:
mediaRecorder.ondataavailable = function (e) {
e.data.arrayBuffer().then(buffer => {
chrome.runtime.sendMessage(appId,{ binaryStream: Uint8ToBase64(new Uint8Array(buffer)) },function (response) {
console.log(response);
});
stopStream();
});
{command: "Binary",data: "GkXfo6NChoEBQveBAULygQRC84EIQoKIbWF0cm9za2FCh4EEQo…ddddddddddddddddddddddddddddddddddddddddddddeow=="}
{command: "Binary",data: "QgaBAACA+4O2l3/8ZtVmH2JXfcZSfs+ulepr+aF2U5d+kW0SDu…fgBgDv16uSH4AY6Q9YA4dcvrl9cvrl9cvrl9coHrr0AI4QA=="}
这是在本机应用程序中接收的:
^ {"command":"Binary","data":"QgaBAACA+4O2l3/8ZtVmH2JXfcZSfs+ulepr+aF2U5d+kW0SDuRqP9n9baILWx2vK/6vraUaEqNo9Tf7htznm8o72wjRTzgjZFyfSf+k4BZDp9luH6Un1JWAhbNem.........ddddddddddddddddddddddddddddddddddddddddddeow=="}
请注意,接收到的数据是第二个发送的数据,但是该接收到的数据的结尾是第一个发送的数据的结尾。因此,缓冲区溢出可能是正确的。有什么解决办法吗?我有使用TCP套接字的相同程序,并且可以运行,但是现在,我需要使用本机消息传递。 STDIN缓冲区很小吗?
Jaime
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。