3

Pythonで作成されたサーバーとJavaでクライアントを使用して、非常に単純なチャットプログラムを作成しようとしています。ただし、サーバーがクライアントから受信したデータをデコードする方法がわかりません。クライアントは送信し、UTF-8 にエンコードします。

印刷するだけで次のようになります: http://i.imgur.com/0usK6j7.jpg

最初に UTF-8 からデコードすると、次のようになります: http://i.imgur.com/Ctwivl4.jpg

NUL 文字または \x00 を削除できると仮定します。メッセージ全体をラップする b'' についても同様です。2 番目の文字は、メッセージの長さを指定しているようです。しかし、どうすればこれをデコードできますか? 文字を手動で削除する必要がありますか? これは非常に基本的な質問であり、おそらく以前に尋ねられたことがあることは知っていますが、何を検索すればよいかさえわかりません.

4

1 に答える 1

3

Java クライアントには、このメソッドで使用する DataOutputStream オブジェクトがあります。

そのメソッドのドキュメントによると、UTF-8 を出力ストリームに書き込みません。「最初に、2 バイトが出力ストリームに書き込まれます」と表示され、文字列に先行する 16 ビットの長さを説明しています。そして、その後も UTF-8 を書き込まず、Modified UTF-8と呼び、実際には UTF-8 ではなくCESU-8のバリアントであるJava 独自の固有のエンコーディングで書き込みます。

したがって、まず、クライアントとサーバー間の通信に使用する正確な形式、つまりプロトコルを明確にする必要があります。普通のUTF-8ですか?writeUTF放出するのは奇妙な構造化されたエンコーディングですか?それは何か他のものですか?次に、その仕様に従うようにクライアントとサーバーの両方を作成します。

于 2013-05-25T14:31:29.377 に答える