2

練習用にクライアント サーバー アプリケーションを構築したいと考えています。それほど難しくない簡単なチャットから始めました。「command:msg」など、文字列を単純に分割するだけで、さまざまなコマンドを識別することもできます。でも、それは少し不便かもしれないと思います。だから、それを実現するためのより良い方法があるかどうか疑問に思っています。そして、私はその側につまずいた: http://www.javaworld.com/jw-01-1997/jw-01-chat.html?page=6 最後にそれは言う:

ただし、別の、より洗練されたソリューションは、一連のストリーム クラスの背後にあるプロトコルを抽象化することです。ヘッダーの構築と挿入の詳細はストリーム クラスによって自動的に処理され、クライアントは以前とほぼ同じインターフェイスのままになります。クライアントはメッセージをストリームに書き込みますが、ストリームをフラッシュする代わりに、アタッチするメソッドを呼び出します。適切なヘッダーを追加し、カプセル化されたメッセージを送信します。

それが何を意味するのかよくわかりません。誰かがそれを説明できますか、それともコード例を教えてください。ひょっとしたら、他にも方法があるのではないでしょうか?

4

2 に答える 2

1

送信したリンクとしてカプセル化されたメッセージを送信するとします。

| ID | len | メッセージの内容|。

「一連のストリームクラスの背後にあるプロトコルを抽象化する」とは、カプセル化されたメッセージに正しいIDと長さを設定するストリームクラスを拡張するクラスを作成することを意味します。

たとえば、2種類のメッセージを送信する拡張PrintWriterの場合:

ID1-通常のメッセージ。

ID2-エラーメッセージ。

class MyProtocolPrintWriter extends PrintWriter {

    public static final int NORMAL_MESSAGE = 1;
    public static final int ERROR_MESSAGE = 2;

    //put the constructor

    public void writeMessage(String message) {
        println(
            String.format(
            "%02x%02d%s", NORMAL_MESSAGE, message.length(), message));
    }

    public void writeErrorMessage(String message) {
        println(
            String.format(
            "%02x%02d%s", ERROR_MESSAGE, message.length(), message));
    }

}
于 2013-03-07T17:25:35.320 に答える
0

これは、プロトコルに使用されたかなり成功したチャット ネットワークの 1 つです。

インターネットリレーチャット

IRC プロトコルを使用して実装されたコマンドのリストを次に示します。

インターネットリレーチャットコマンド一覧

これらのコマンドを一連のストリーム クラスとして実装します。ユーザーがコマンドを発行すると、ストリーム クラスがヘッダーの構築とストリームへの挿入の詳細を処理します。

于 2013-03-07T17:13:11.080 に答える