如何将二进制数据从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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...