Java 例 - ServerSocket と Socket 通信例

Java 例

以下の例では、クライアントがサーバーにメッセージを送信し、サーバーがメッセージを受信して読み取って出力し、その後クライアントに書き出し、クライアントが出力を受け取る方法を示しています。

1、サーバー側を構築する

  • サーバーは通信用のServerSocketを確立する
  • サーバーはSocketを確立してクライアントの接続を受け付ける
  • IO入力ストリームを確立してクライアントが送信したデータを読み取る
  • IO出力ストリームを確立してクライアントにデータメッセージを送信する

サーバー側のコード:

Server.java ファイル

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(8888); System.out.println("サーバーを起動...."); Socket s = ss.accept(); System.out.println("クライアント:"+s.getInetAddress().getLocalHost()+"サーバーに接続しました"); BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); //クライアントから送信されたメッセージを読み取る String mess = br.readLine(); System.out.println("クライアント:"+mess); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); bw.write(mess+"\n"); bw.flush(); } catch (IOException e) { e.printStackTrace(); } } }

上記のコードを実行した出力結果は次のとおりです:

サーバーを起動中...

2、クライアント側を構築する

  • Socket通信を作成し、通信サーバーのIPとPortを設定する
  • IO出力ストリームを確立してサーバーにデータメッセージを送信する
  • IO入力ストリームを確立してサーバーから送信されたデータメッセージを読み取る

クライアント側のコード:

Client.java ファイル

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.UnknownHostException; public class Client { public static void main(String[] args) { try { Socket s = new Socket("127.0.0.1",8888); //IOを構築 InputStream is = s.getInputStream(); OutputStream os = s.getOutputStream(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os)); //サーバー側にメッセージを送信する bw.write("クライアントとサーバーの通信をテストし、サーバーがメッセージを受信してクライアントに返す\n"); bw.flush(); //サーバーが返したメッセージを読み取る BufferedReader br = new BufferedReader(new InputStreamReader(is)); String mess = br.readLine(); System.out.println("サーバー:"+mess); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

上記のコードを実行した出力結果は次のとおりです:

サーバー:テストクライアントとサーバー通信、サーバーはメッセージを受信してクライアントに返します。

Java 例

その他の拡張