0

Chrome 拡張機能は、ネイティブ メッセージングを使用して json データを受信します。

var port = chrome.runtime.connectNative('company.my_application');  
port.onMessage.addListener(function(result) { 
    console.log(result);
}); 

私のC ++プログラムでは、json文字列を送信するstr1[]と拡張機能はそれを受信できますが、送信するstr2[]と拡張機能は受信できません。この文字列に問題はありますか?

str2[]正しい Json データである長い文字列を表しますが、拡張によって受け入れることはできません。
同じ問題に遭遇して解決した人はいますか?

char str1[]="{\"Func\":\"test\",\"msg\":\"hello\"}";

char str2[]="{\"Func\":\"test\",\"msg\":\"3c476c6f62616c4a53206d6f64756c6549643d226f7261636c652e6f6174732e736372697074696e672e6d6f64756c65732e616466223e3c215b43444154415b2f2a2061616161616161616161616161616161612061616161616161612061616161616161616161206161616161202a2f262378443b262378413b262378443b262378413b616161616161616120616161616161616161616161616161616161616161616161616161612861612c6161616161297b262378443b262378413b096161617b262378443b262378413b090961616120616161613d61616161616161286161293b262378443b262378413b09096161616161203d206161616161616161286161616161293b262378443b262378413b0909616128276161616161273d3d6161616161616161616161616161616161616161616161616161616161612861612c27616161616161616161616161616161616120616161616161616161616161616161616161616161616161616161612729297b262378443b262378413b09090961616120616161616161616161613d2861616161613d3d616161613f27273a6161616161293b262378443b262378413b09090961616120616161613d616161612e6161616161616128293b262378443b262378413b09090961616120616161616161616161616161203d20616161612e5f6161616161616161616161616161612861616161293b262378443b262378413b090909616120286161616161616161616161612e61616161612e616161616161613d3d22616161616122297b262378443b262378413b090909096161616161616161616161612e616161616128293b262378443b262378413b0909097d262378443b262378413b090909616161612e5f6161616161616161616161616161616161612861616161292e6161616161203d20616161616161616161613b262378443b262378413b090909616161612e5f616161616161616161616161616161616161616161286161616161616161616161612c2061616161616161616161293b262378443b262378413b0909096161616161616161616161612e6161616128293b262378443b262378413b09097d616161617b262378443b262378413b0909096161616161616161616161616161616161612e6161612827616161616161616161616161616161616120616161616161616161616161616161616161616161616161616161612061616161616161616120616120616161612061612061616161616161612061612061616161616161612e2e2e2e61613a272b61612c6161616161616161616161616161616161612e61616161615f6161616161293b262378443b262378413b09097d0909262378443b262378413b202020207d616161616128616161297b262378443b262378413b20202020096161616161616161616161616161616161612e6161612827616161616161616161616161616161616120616161616161616161616161616161616161616161616161616161612061616161613a272b6161612e61616161616161616161612b272e2e2e2e61613a272b61612c6161616161616161616161616161616161612e61616161615f6161616161293b262378443b262378413b202020207d262378443b262378413b7d262378443b262378413b262378443b262378413b2f2a206161616161616161616161616161616161206161616161616161206161616161616161616120616161202a2f262378443b262378413b5d5d3e3c2f476c6f62616c4a533e\"}";

次のように長さとメッセージを送信しようとしています:

size_t len = strlen(str2);
cout.write(str2, len);
fflush(stdout);

私はこれらの方法を使用して長さを送信しました:

    cout.write((char*)&len, 4);

    putchar ((( char *) &len) [0]);
    putchar ((( char *) &len) [1]);
    putchar ((( char *) &len) [2]);
    putchar ((( char *) &len) [3]);

    putchar(char(((len >> 0) & 0xFF)));
    putchar(char(((len >> 8) & 0xFF)));
    putchar(char(((len >> 16) & 0xFF)));
    putchar(char(((len >> 24) & 0xFF)));
4

2 に答える 2

1

[以下の回答に変換されたOPのソリューション]

コメントありがとうございます。この問題を修正しました。

原因:

の長さはstr[]です2601(0x29 0x0a 0x00 0x00)Ox0d私の IO は の前に自動的に挿入される0x0aため、出力の長さは 5 バイトになります(0x29 0x0d 0x0a 0x00 0x00)

解決策:

IO モードを変更します。

#include<io.h>
#include<fcntl.h>
_setmode(fileno(stdout), O_BINARY);
于 2014-11-07T08:50:52.150 に答える
0

使用する必要があります

unsigned int len = strlen(str2);

それ以外の

size_t len = strlen(str2);

ネイティブ メッセージングプロトコルでは、メッセージの前に 32 ビット整数が必要ですが、のビット サイズsize_tは実装に依存します。私の64ビットシステムでsizeof(size_t)は、たとえば8(バイト)です。

于 2014-09-18T08:13:08.517 に答える