Java チャットサーバーとチャットクライアントサンプルソース
ネットワーク上でChatClientからChatServerに文字列を送信するプログラム。
実行時には、まずChatServerを起動させておき、その後ChatClientを起動して接続する。
同一のPCでも実験はできる。
コマンドプロンプトで、
java ChatServer 16000
次に、
java ChatClient 127.0.0.1 16000
のように入力する。127.0.0.1は自分自身のアドレスをあらわす。
これにより、1台のPC上でサーバーソフトとクライアントソフトが動く。
↑この本はJavaの通信プログラムの基本理解に手頃です。あまり厚くないのでとっつきやすい。
//ChatServer.java //チャットサーバープログラム //チャットクライアントプログラムからの接続を待つ。 //接続後は1行の文字列読み取りを行い、接続終了する。 import java.net.*; import java.io.*; class ChatServer { public static void main(String[] args) { try { // サーバーソケット作成 //起動時パラメータからポートを読み取り、 //そのポートで接続要求を待つ //ServerSocketクラスはクライアントからの接続を待ち、 //srvSock.accept();によって接続したSocketオブジェクト //を返す。 //その後の通信には、このSocketオブジェクトを使用する。 int port = Integer.parseInt(args[0]); ServerSocket srvSock = new ServerSocket(port); // 接続待機。接続完了後、次行命令に移る。 Socket socket = srvSock.accept(); //接続先アドレスを表示 System.out.println("接続先: " + socket.getInetAddress()); //通信処理 //ソケットの入力ストリームから文字列を1行読み取る。 BufferedReader reader = new BufferedReader (new InputStreamReader(socket.getInputStream())); String line = reader.readLine(); //読み取った文字列を表示 System.out.println("受信メッセージ:" + line); //終了処理 このプログラムは1行読み取ったら終了する。 //通信を続けるのであれば、reader.readLine();を //ループするが、終了コマンドをチェックする等の処理を //記述する。 reader.close(); socket.close(); srvSock.close(); } catch (IOException e) { e.printStackTrace(); } } }
//ChatClient.java //チャットクライアントサンプルプログラム //チャットサーバーが動いているコンピュータに対して //接続を行う。 //コマンドラインパラメータとして接続先アドレスとポート番号を //指定する。 import java.net.*; import java.io.*; class ChatClient { public static void main(String[] args) { try { InetSocketAddress socketAddress = new InetSocketAddress(args[0], Integer.parseInt(args[1])); Socket socket = new Socket(); socket.connect(socketAddress, 10000); InetAddress inetadrs; if ((inetadrs = socket.getInetAddress()) != null) { System.out.println("接続先: " + inetadrs); } else { System.out.println("接続失敗"); return; } //送信するメッセージは以下の行に記述されているもの。 String message = "チャット接続送信テスト。"; PrintWriter writer = new PrintWriter(socket.getOutputStream()); System.out.println("送信メッセージ: " + message); writer.println(message); writer.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }