2

Javaでチャットプログラムを実装しています。クライアントは、さまざまな種類の情報をサーバーに送信できます(つまり、サーバーに参加してユーザー名とパスワードを送信する、サーバー上の別のユーザーとのプライベートチャットを要求する、サーバーから切断するなど)。

サーバー/クライアントが、あるクライアントから別のクライアントに送信されるチャットテキストメッセージを意味する「テキスト」メッセージと「コマンド」メッセージ(切断、プライベートチャットの要求、要求)を区別する正しい方法を探しています。サーバーまたはクライアント向けのファイル転送など)。

2つのオプションがあります。

  1. シリアル化されたオブジェクトを使用し、「instanceof」を実行して、受信側でオブジェクトが何であるかを判別します。
  2. データをバイト配列として送信し、配列の最初のNバイトを予約して、着信データの「タイプ」を指定します。

これを行うための「正しい」方法は何ですか?実際のプロトコル(oscar、irc)はこの状況をどのように処理しますか?

私はこのトピックについてグーグルで調べましたが、単純なJavaチャットアプリケーションを中心とした例/ディスカッションしか見つかりませんでした。プロトコル設計(私が最終的に実践するつもりです)について詳しく説明するものはありません。

助けてくれてありがとう...

4

2 に答える 2

2

通常、標準のテキスト/チャットメッセージを含む、すべてのメッセージのコンテンツの種類を識別する小さなメッセージヘッダーがあります。

2つの提案のどちらでも構いません。(2番目のアプローチでは、配列の長さにもいくつかのバイトを予約する必要があります。)

于 2012-07-29T15:00:02.950 に答える
2

シリアル化は複雑なメカニズムであり、間違った方法で簡単に使用できるため、2番目のアプローチの方がはるかに優れています(たとえば、具体的なシリアル化されたクラスの内部コンテンツに自分自身をバインドする場合があります)。さらに、プロトコルはJVMメカニズムにバインドされます。メッセージの区別に「プロトコルヘッダー」を使用することは、ネットワークプロトコル(FTP、HTTPなど)で一般的な方法です。テキスト形式の場合はさらに優れています(人々はそれを読むことができます)。

于 2012-07-29T15:33:23.837 に答える