Javaを使用してチャットサーバーを作成する

前書き

ネットワークは、デバイスを介してユーザーを接続するために不可欠なプログラミングの主要な分野です。 そのため、多くのプログラミング言語には、ユーザーとサーバー間、またはピア間の接続を形成する複数の方法があります。 プログラミングを開始するために、Javaは多くのプログラマーが学ぶ最初の言語の1つであり、Javaがネットワーク接続を処理できる興味深い方法の1つはJavaソケットの使用です。 1つのサーバーと多くのユーザーの間にチャットサーバーを開発して、Javaでソケットを使用する方法を説明するために、このチュートリアルを準備しました。 このチュートリアルは、クライアント側とサーバー側の開発に分かれています。

要件:

  • Java JDK(これにはバージョン1.8.0_74を使用しました)
  • Java IDE(これにはEclipse Marsを使用しました)
  • 上記のクラスを持つパッケージ構造

タイマー:約15〜30分

スキル:このガイドでは、基本的なJavaの経験があり、一般的なJava I / Oタイプに精通していることを前提としています

ステップ1:サーバークラスでServerSocketをセットアップする

ChatServerクラスのmainの先頭に静的サーバーソケットを作成し、ポート番号でインスタンス化します。

ヒント:ServerSocketsは4444以外のポート番号でインスタンス化される場合がありますが、1000未満の番号はシステムですでに使用されている可能性が高くなります。

ステップ2:ログインクラスでソケットを作成する

ログインのメインメソッドでソケットを作成し、ホストアドレスとポート番号を指定します。 これはログインウィンドウであるため、後で実際のチャットウィンドウに渡されるため、ソケットはインスタンス変数にできます。

ヒント:「localhost」は、サーバーがクライアントと同じコンピューターで実行されていることを指定するために、デバッグの目的でソケットパラメーターで使用されます。 後でこれを変更して、ホストアドレスを取得してリモートサーバーに接続することができます。

手順3:クライアントを継続的に受け入れるループを作成する

chatServerでserverSocketをインスタンス化した後、すべてのクライアントを継続的に受け入れるwhileループを開始します。

ステップ4:クライアントスレッドを作成する

  1. serversocket.acceptから受け取ったソケットで、新しいClientThreadを作成します。
  2. ClientThreadを使用して新しいスレッドを作成し、スレッドでstartを呼び出します。
  3. ClientThreadで、ClientThreadがChatServerを拡張し、Runnableを実装する
  4. ClientThreadコンストラクターを作成し、runメソッドを追加します。

ステップ5:サーバースレッドを作成する

  1. ソケットを使用して新しいServerThreadを作成します。
  2. ServerThreadを使用して新しいスレッドを作成し、スレッドでstartを呼び出します。
  3. ServerThreadで、ServerThreadにRunnableを実装させます
  4. ServerThreadコンストラクターを作成し、runメソッドを追加します。

手順6:クライアントスレッドでデータを送受信する

  1. ClientThreadで、プライベートBufferedReaderを作成してクライアントからデータを受信し、PrintWriterを作成してクライアントに書き込みます。
  2. PrintWriterのゲッターを作成します
  3. ソケットの出力ストリームを使用して実行中のPrintWriterを初期化し、ソケットの入力ストリームを使用して新しいInputStreamReaderを使用してBufferedReaderを初期化します
  4. 新しい入力をチェックし、ClientThreadsのリストとPrintWriterのゲッターを使用して、すべてのクライアントに入力を印刷する実行中にwhileループを作成します。

手順7:サーバースレッドでデータを送受信する

  1. ServerThreadで、プライベートのBufferedReaderを作成してサーバーからデータを受信し、別のBufferedReaderを使用してユーザーからデータを受信し、PrintWriterを作成してサーバーに書き込みます。
  2. ソケットの出力ストリーム、ソケットの入力ストリームを使用した新しいInputStreamReaderを使用したサーバーのBufferedReader、System.Inを使用した新しいInputStreamReaderを使用したユーザーのBufferedReaderを使用して、実行中のPrintWriterを初期化します。
  3. 実行中にwhileループを作成し、サーバーからの新しい入力をチェックして入力をコンソールに出力し、ユーザーからの新しい入力をチェックしてその入力をサーバーに出力します。

ステップ8:サーバーをテストし、オプション機能を追加する

サーバーを実行してクライアントを起動した後、プログラムは各クライアントからのすべてのメッセージを他のすべてのクライアントに中継する必要があります。 これは、Javaソケットで実行できることの小さなテストでした。

サーバー自体がメッセージを中継できるようにする機能を追加することで、このプロジェクトを拡張できます。メッセージをアーカイブし、他の形式の入力などを許可して、Javaソケットとネットワーク全般に慣れ親しむことができます。

関連記事