-1

DatagramPacket.getData()現在、呼び出しの結果に対して正規表現を実行しようとしています。

として実装String myString = new String(thepkt.getData()):

しかし奇妙なことに、Java はすべてのデータをカプセル化するために使用する終了引用符を削除しています (下のリンクされた画像を参照)。

デバッグ セッション中に変数インスペクタのフィールドをクリックして何も変更しないと、変数フィールドをクリックすると、何も変更せずに再び修正されます。変数の検査フィールドを黄色で強調表示して、変更を知らせます。その値も、文字列オブジェクトではなくバイト配列のように表示されます

http://i.imgur.com/8ZItsZI.png

それは私の正規表現を捨てており、それを引き起こすものは何も見えません。これはクライアント サーバー シミュレーションであり、クライアント側では、getData は問題なくデータを返します。

4

2 に答える 2

0

以下で提供されているソリューションを使用して動作させました。

https://stackoverflow.com/a/8557165/1700855

しかし、パケットの長さを String コンストラクターに指定しないと、体系的な末尾の二重引用符が削除される理由がわかりません。先に進む前に、自分の問題の解決策を本当に理解したいので、誰でも説明を提供できますか:)

于 2013-03-30T08:55:33.440 に答える
0

問題は、DatagramPacket.getData の仕様を読んでいないことです。

データ バッファーを返します。受信したデータまたは送信するデータはoffset、バッファ内のから始まり、length長時間実行されます。

したがって、正確に言うと、使用する必要があります

new String(thepkt.getData(), thepkt.getOffset(), thepht.getLength())

または、デフォルトの文字セットを使用しない場合:

new String(thepkt.getData(), thepkt.getOffset(), thepht.getLength(), someCharset)

于 2013-03-30T12:46:23.340 に答える