2

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

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;
}
4

1 回答 1

4

本机消息传递主机无法发送超过 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;

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

于 2014-12-02T23:01:35.893 回答