gpt4 book ai didi

c++ - native 消息传递主机无法发送 1 MB 数据

转载 作者:行者123 更新时间:2023-11-30 02:42:17 25 4
gpt4 key购买 nike

我在 C++ 中使用 native 主机,当我将 base64 从 native 应用程序发送到大小为 base64 < 1M 的 chrome 扩展( native 消息传递)时,程序仍在运行。但是当我将 base64 从 native 应用程序发送到大小为 base64 > 1M 的 chrome 扩展( native 消息传递)时,程序出现错误“与 native 消息传递主机通信时出错”我的代码如下

int _tmain(int argc, _TCHAR* argv[])
{
std::cout.setf( std::ios_base::unitbuf );
unsigned int c, t=0;
inp="";
t=0;
// Sum the first 4 chars from stdin (the length of the message passed).
for (int i = 0; i <= 3; i++) {
//t += getchar();
t += std::pow(256.0f, i) * getchar();
}
// Loop getchar to pull in the message until we reach the total
// length provided.
for (int i=0; i < t; i++) {
c = getchar();
inp += c;
}

unsigned int len = inp.length();
// We need to send the 4 btyes of length information
std::cout << char(((len>>0) & 0xFF))
<< char(((len>>8) & 0xFF))
<< char(((len>>16) & 0xFF))
<< char(((len>>24) & 0xFF));
// Now we can output our message
std::cout << inp;
return 0;
}

最佳答案

native 消息传递主机不能发送超过 1024*1024 字节的消息。来自

https://cs.chromium.org/file%3Anative_message_process_host.cc%20kMaximumMessageSize :

// Maximum message size in bytes for messages received from Native Messaging
// hosts. Message size is limited mainly to prevent Chrome from crashing when
// native application misbehaves (e.g. starts writing garbage to the pipe).
const size_t kMaximumMessageSize = 1024 * 1024;

要解决此问题,您必须将从 native 消息传递主机发送到您的扩展程序/应用程序的消息分成小于 1MB 的 block 。
在您的 native 消息传递主机中,您可以创建一个循环,重复输出 32 位消息长度(最大 1MB),然后是消息 block 。
在您的应用程序/扩展程序中,使用 chrome.runtime.connectNative而不是 chrome.runtime.sendNativeMessage打开一个持续时间超过一条消息的端口(如果您使用 sendNativeMessage,该端口将在收到一条回复后关闭,这会导致 native 消息传递主机终止)。

关于c++ - native 消息传递主机无法发送 1 MB 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27243529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com