私はネットワーク経由でアプリケーションを動作させる必要がある学校への割り当てを持っています。 JavaまたはC(またはその両方)で実行できます。 私たちは、コンピュータ間で通信する正確なプロトコルを与えられています。 5バイトと+++上に、REGISこのメッセージにバイトからネットワークへ
[REGIS␣id␣port␣pass+++]
は、IDが2つのバイトを渡す、4バイトに8バイト、ポート上に正確でなければならない:ここ は、このプロトコルのメッセージの例であります3バイト。 このメッセージを読むには、InputStreamオブジェクトとread()メソッドを使用します。したがって、byte []配列を取得します。
私の質問は:byte []配列からStringオブジェクトを直接構築し、正規表現を使ってメッセージが正しく構築されているかどうかを確認できますか?
その他の質問は:メッセージを含むStringを作成し、String.getBytes()を使用してネットワーク経由でバイト配列[]を送信できますか?
私の心配はエンコードについてです:私はそれが1文字ごとに1バイトになると確信していますか? Cプログラムがメッセージを読んでも問題はありませんか?
ありがとうございました!
「私はバイト[]配列から直接Stringオブジェクトを構築することができます」することができます - コンストラクタはそのために、文字通りあります。まだ何か試しましたか? – f1sh
はい私はそれのためのコンストラクタがあることを知って、私の質問です:私はそれを行うことができますし、変換の間に正しいバイト数をまだ持っていることを確認しますか? – StuYYY
正規表現は文字列で動作します。文字列はバイトではなく文字で構成されています。すべてのバイトシーケンスは有効な文字列ではなく、バイトへの変換方法は選択した文字セット(別名エンコーディング)によって異なります。あなたが期待するバイト数を読んでみてはいかがですか(22)?どのようなバイト数が制限されていないので、22バイトを読んでも、メッセージが無効であることをどうやって知ることができますか?表示される唯一の無効なケースは次のとおりです。1. 22バイト未満を受信した後、ソケットが閉じられています。あなたはN個のメッセージを受信するはずですが、受信バイト数は22の倍数ではありません。 –