ノード関数を使用して、ヘッダとペイロードで構成されるバッファをコンパイルしています。ヘッダの第1項はサーバに送信されるバッファの合計サイズであり、第2要素はサーバに送信されるコマンドであり、次にペイロードがバッファに追加される。必要なバッファーの長さを計算するときにNPMのbufferpack.jsライブラリーを使用して、バッファーが作成された後と同じサイズを取得していて、バッファーの長さプロパティーを取得します。ノードsocket.writeは、元のバッファよりも多くのバイトを返します。
私が見ている問題は、バッファが127バイトを超えると、書き込まれたバイト数が実際のバッファのバイト数と一致しないということです。これは余分なバイトで何をすべきか分からないため、サーバー上で問題を引き起こしています。ここで
は、システムが正常に動作し、バイト時に、私は、バッファにデータを変換して、サーバーここで
_sendall(cmd, payload='', callback){
console.log('payload:', payload.length)
let fmt = '>HB'
let size = struct.calcLength(fmt) + payload.length
console.log('size:',size)
let header = [size, cmd]
let buf = struct.pack(fmt, header) + payload
console.log('buf:', buf.length)
console.log('[INFO] Buffer Sent:',buf)
this.sock.write(buf, 'binary', (err)=>{
console.log('[INFO] Bytes written now:', this.sock.bytesWritten-this._bytesWrittenPrevious)
console.log('[INFO] Total Bytes Written:', this.sock.bytesWritten)
this._bytesWrittenPrevious = this.sock.bytesWritten
if (err) {
console.log('[ERROR] _sendall:', err)
return callback(false)
}
return callback(true)
})
}
にバッファを送信するために使用しています方法は、コンソール出力の例ですバッファのサイズと一致して送信されます。サーバーは応答し、すべてが世界で正しいです。ここで
[INFO] Sending the input setup
payload: 20
size: 23
buf: 23
[INFO] Buffer Sent: Iinput_int_register_0
[INFO] Bytes written now: 23
[INFO] Total Bytes Written: 143
は、システムが正常に動作していないと、サーバーが応答を返したことがないとき、私は見ていて火決してコールバックがあるので、コードがハングアップするものです。
[INFO] Sending the input setup
payload: 143
size: 146
buf: 146
[INFO] Buffer Sent: �Iinput_double_register_0,input_double_register_1,input_double_register_2,input_double_register_3,input_double_register_4,input_double_register_5
[INFO] Bytes written now: 148
[INFO] Total Bytes Written: 291
何が起こっているのですか?私はこのような問題に関して何かを見つけることができなかったので、どんな助けも大歓迎です。
UPDATE:
私はsock.writeにエンコーディングに@mscdexが推奨する変更を加えたし、今私は私が送信していますが、私はまだ問題を抱えています同じバイト数を書いています。私はbufferpack.jsライブラリを使用してunsigned short(H)としてエンコードされているsize要素に絞り込んだ。いつでもサイズが127以上です。バッファをアンパックしようとすると、エンコーディングが間違っていると思います。サイズのNaN戻り値を取得しています。問題の解決に取り組んでいます。
おかげで、今で建設されたバッファのサイズに合わせ書き込まれたバイトのサイズを作った:
は、ここで期待どおりに動作新しいコードです。 –