2017-05-26 24 views
-1

私はネットワーク経由でアプリケーションを動作させる必要がある学校への割り当てを持っています。 JavaまたはC(またはその両方)で実行できます。 私たちは、コンピュータ間で通信する正確なプロトコルを与えられています。 5バイトと+++上に、REGISこのメッセージにバイトからネットワークへ

[REGIS␣id␣port␣pass+++] 

は、IDが2つのバイトを渡す、4バイトに8バイト、ポート上に正確でなければならない:ここ は、このプロトコルのメッセージの例であります3バイト。 このメッセージを読むには、InputStreamオブジェクトとread()メソッドを使用します。したがって、byte []配列を取得します。

私の質問は:byte []配列からStringオブジェクトを直接構築し、正規表現を使ってメッセージが正しく構築されているかどうかを確認できますか?

その他の質問は:メッセージを含むStringを作成し、String.getBytes()を使用してネットワーク経由でバイト配列[]を送信できますか?

私の心配はエンコードについてです:私はそれが1文字ごとに1バイトになると確信していますか? Cプログラムがメッセージを読んでも問題はありませんか?

ありがとうございました!

+3

「私はバイト[]配列から直接Stringオブジェクトを構築することができます」することができます - コンストラクタはそのために、文字通りあります。まだ何か試しましたか? – f1sh

+0

はい私はそれのためのコンストラクタがあることを知って、私の質問です:私はそれを行うことができますし、変換の間に正しいバイト数をまだ持っていることを確認しますか? – StuYYY

+1

正規表現は文字列で動作します。文字列はバイトではなく文字で構成されています。すべてのバイトシーケンスは有効な文字列ではなく、バイトへの変換方法は選択した文字セット(別名エンコーディング)によって異なります。あなたが期待するバイト数を読んでみてはいかがですか(22)?どのようなバイト数が制限されていないので、22バイトを読んでも、メッセージが無効であることをどうやって知ることができますか?表示される唯一の無効なケースは次のとおりです。1. 22バイト未満を受信した後、ソケットが閉じられています。あなたはN個のメッセージを受信するはずですが、受信バイト数は22の倍数ではありません。 –

答えて

1

私の質問は:私は バイト[]配列から直接Stringオブジェクトを作成し、メッセージが正しく 構築されるかどうかを確認するために正規表現を使用できますか?

をすることができますはい、Stringクラスは、メッセージが有効であるかどうかを確認するために、適切な正規表現を適用し、その後byte []を取り、コンストラクタを持っている

その他の質問は:私は私のメッセージを含む文字列、および利用することができます String.getBytes()は、ネットワーク経由でバイト配列[]を送信しますか?

はい、あなたは、あなたがネットワーク経由でファイルのバイトを送信する方法を知りたい場合はlook this

+0

はい、私はこれらのことをする方法を知っています、私はコードについて尋ねていません、私はこれを行う正しい方法ですか?しかし、答えが – StuYYY

+0

のおかげで、0x10 0x09 0x01バイトが得られたらどうなりますか?その後、バイトセットから文字列への直接変換は、charsetの前提はありませんか?これは、入力に応じて動作するか動作しない可能性があります。 – BigMike

関連する問題