0

RFC 6455 プロトコルを使用して Firefox ブラウザーで実行される Java スクリプトである Web サーバー クライアントにデータを送信する前に、データをマスクする次の C コードを開発しました。ただし、クライアント側で何も表示できないため、問題に直面しています。サーバーからクライアントに送信するときにデータをマスクする必要はないと言う人もいます。本当 ?私の場合、それが機能しているとは思えません。私の質問があいまいな場合はお知らせください。ご親切にありがとうございました。

char frame[131],message[360];
strcpy(message,"Server here !");                
frame[0] = '\x81';
frame[1] = 128 + strlen(message);
frame[2] = '\x00';
frame[3] = '\x00';
frame[4] = '\x00';
frame[5] = '\x00';
snprintf(frame+6, 124, "%s", message);
printf("%s", frame);
n = write(newsockfd, frame, strlen(frame));
4

3 に答える 3

1

nullが埋め込まれているため、フレームの長さはstrlen()で指定されません。メッセージの長さをフレームプレフィックスの長さに追加します。しかし、マスキングはどこにありますか?

于 2012-06-29T06:06:46.767 に答える
1

strlenこの関数を使用して、C スタイルの文字列以外の長さを取得しないでください。フレームは C スタイルの文字列ではありません。フレームの長さは で、 では6 + strlen(message)ありませんstrlen(frame)

printf("%s", frame);これがうまくいかなかった理由でもあります。フォーマット指定子は、%sフレームにはない C スタイルの文字列用です。

これは、メッセージが C スタイルの文字列であることを前提としています。strlenそうでない場合は、 の初期化子でその長さを計算するために使用するため、他のバグがありますframe[1]

于 2012-06-29T06:05:16.097 に答える
0

クライアントに送信されたフレームをマスクする必要があるのはなぜですか?

RFC 6455は次のように述べています。

サーバーは、クライアントに送信するフレームをマスクしてはなりません。マスクされたフレームを検出した場合、クライアントは接続を閉じる必要があります。

詳細については、セクション 5.1 を確認してください。

于 2013-04-15T10:03:15.623 に答える