[Javaチャットルームサーバ]実戦の7クライアントクラス


前言
やや難しい技術を習得し、それを十分に理性的に分析し、決断を下す「;このシリーズはsocketに関する知識に関連しているが、学習する前に、多くのプログラマーと共有したいのは心境である.学習は順序を追って漸進する過程であり、心理状態はいつでも調節し、傲慢でイライラしている状態を維持しなければならない.例えば、最近ネット易公開授業MIT「アルゴリズム導論」を見ている.ああ、先生は、アルゴリズムを学ぶ前にコンピュータ数学+離散数学+確率論などの授業の知識が必要だと言いました.だから、アルゴリズムをよく勉強していないプログラマーは基礎から始めてもいいです.これは中国式教育の災いですね.(ここでは1万字を省略します......)
原文アドレス:Building a Java chart server[1]
プロジェクトソース:Socket_Chat
目次
  • [Javaチャットルームサーバ]実戦の一つ冒頭紹介(完了)

  • [Javaチャットルームサーバ]実戦の二傍受類(完了)

  • [Javaチャットルームサーバ]実戦の3受信サイクル(完了)

  • [Javaチャットルームサーバ]実戦の4スレッドクラス(完了)

  • [Javaチャットルームサーバ]実戦の5読み書きサイクル(サービス側)(完了)

  • [Javaチャットルームサーバ]実戦の6デッドリンク除去(完了)

  • [Javaチャットルームサーバ]実戦の7クライアントクラス(完了)

  • [Javaチャットルームサーバ]実戦の8読み書きサイクル(クライアント)(完了)


  • 本文
    クライアントクラス
    信じるかどうかは、チャットシステムのサービス側のコンテンツの作成が完了しました.新しい接続を傍受するオブジェクト(サービス側)と、サービス側スレッド(サービス側スレッド)が独自の接続を処理する接続オブジェクトがあります.
    しかし、クライアントについては?
    Java言語を使用する理由のいくつかは、Webページでプログラムを実行できると考えているからです.
    この方法だけではありません.クライアントは標準的な独立したプログラムとして、サービス側のような独自のスレッドで実行されます.このように書き続けると、以下にいくつかの異なる議論があります.
    —————————————————————————————————————————————————————————————————————————
    コンストラクタコンストラクタ:インタフェースの作成インタフェースノサクセイ
    デルのクライアントには、ユーザーとクリーンに対話する必要があるため、グラフィックスインタフェース(GUI)があります.サービス側は、コマンドラインのインタフェースを起動すると、ユーザー(または管理者)は他のことを必要としないため、コマンドラインのインタフェースを使用できます.しかし、全体的なクライアント側はデルのユーザーインタラクションです.
    私たちのクライアントの最初のことは、インタフェースを構築することです.
    //     
    public Client( String host, int port ) {
    //     
    setLayout( new BorderLayout() );
    add( "North", tf );
    add( "Center", ta );
    //         ,           ,           
    tf.addActionListener( new ActionListener() {
    public void actionPerformed( ActionEvent e ) {
    processMessage( e.getActionCommand() );
    }
    } );
    // ...
    詳細については説明しません.いくつかを除いて、チャットウィンドウには新しい情報を入力するための入力ボックスが含まれており、ウィンドウに他のユーザーに情報を表示します.ユーザーが入力ドメインにいくつかの文字を入力するたびに、この文字列はprocessMessage()メソッドに渡されます.
    —————————————————————————————————————————————————————————————————————————
    コンストラクタコンストラクタ:接続サービス
    コンストラクション関数の次のことは、次のように接続サービスを初期化することです.
    //      
    try {
    //      
    socket = new Socket( host, port );
    //         ,      !
    System.out.println( "connected to "+socket );
    //       ,          /   
    din = new DataInputStream( socket.getInputStream() );
    dout = new DataOutputStream( socket.getOutputStream() );
    //            
    new Thread( this ).start();
    } catch( IOException ie ) { System.out.println( ie ); }
    }
    は、送信された情報を処理する個別のスレッドを作成したことに注意しています.次のセクションで行います.
    —————————————————————————————————————————————————————————————————————————
    ユーザー入力
    Appletはコンポーネントとして大型GUIフレームワークに埋め込まれている.このフレームワークでは、コードは通常、入力イベントに応答してGUIウィンドウプログラムの動作を受け入れる.appletはイベントを処理し、必要なことをしてから戻り、システムが別のイベントを送信するのを待っている.
    この例では、ユーザーは入力領域に何かを入力する可能性があります.トリガは、構築中に作成された匿名の内部クラスを呼び出します.匿名の内部クラスは、逆にprocessMessage()を呼び出すのも、私たちが作成する方法です.
    このメソッドは、ユーザーが入力した文字列を渡します.このメソッドは簡単です.文字列をサービス側に書き、テキスト入力ボックスを空にして、ユーザーが他の情報を入力し続けることができます.次はコードです.
    //               
    private void processMessage( String message ) {
    try {
    //         
    dout.writeUTF( message );
    //      
    tf.setText( "" );
    } catch( IOException ie ) { System.out.println( ie ); }
    }

    —————————————————————————————————————————————————————————————————————————
    バックグラウンドスレッド
    私たちのプログラムはGUIイベントをずっと待つことはありません.それはネットワークイベントの準備もしています.つまり、サービス側からのデータを待つことです.そして、フレームワーク内で破壊関数を作成していないので、これらの情報を受け入れて、私たちは自分で構築しました.
    最後のことを覚えておいてください.私たちのコンストラクタは新しいスレッドを作成します.サービス側がしたことに似ています.しかし、appletとして実行する非常に異なる理由があります.
    —————————————————————————————————————————————————————————————————————————
    終わりの言葉
    この例では、バックグラウンドスレッドを作成し、ループ読み出しが可能になります.次のセクションでは、この点について説明します.
    参考文献
    [1]. Building  a Java chart server
    [2]. Java sockets 101および中国語シリーズ JAVAソケット101
    [3]. Java socket通信の基本原理の紹介