1

Я использую собственный хост в C++, когда я отправляю base64 из собственного приложения в chrome extension (Native messaging) с размером base64 < 1M, программа все еще работает. но когда я отправить base64 из родного приложения для расширения хрома (Native сообщений) с размером base64> 1M, программа «Ошибка при обмене данной с нативным хостом сообщений» моего код нижеСобственный почтовый ящик не может отправлять данные 1 МБ

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; 
} 
+1

Итак, где вопрос ...? Что вы хотите узнать? –

+0

Да, это по дизайну, они просто не принимают сообщения размером более 1 М. Вам нужно разбить его на ряд небольших сообщений и повторно собрать данные в расширении. – donaddon

+0

@donaddon У вас есть источник для вашего требования? – Xan

ответ

2

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; 

Чтобы обойти эту проблему, вы должны разделить сообщение, отправленное из родного хоста сообщений на ваше расширение/приложение на кусках менее 1 МБ.
В вашем собственном узле обмена сообщениями вы можете создать цикл, который будет последовательно выводить длину 32-разрядного сообщения (макс. 1 МБ), за которым следует кусок сообщения.
В вашем приложении/добавочном номере используйте chrome.runtime.connectNative вместо chrome.runtime.sendNativeMessage, чтобы открыть порт длиной дольше одного сообщения (если вы используете sendNativeMessage, порт будет закрыт после получения одного ответа, что приведет к завершению работы локального сервера обмена сообщениями).

+0

Большое спасибо за подходящую ссылку на источник. Тем не менее, такое положение дел вызывает сожаление. – Xan

+0

@Xan Что вызывает сожаление? Ограничение 1 МБ, обход или документация для обмена сообщениями? –

+0

Ограничение. Уже неудобный протокол обмена сообщениями еще более неудобен. И, конечно же, тот факт, что он не задокументирован. – Xan