トップページ > コンテンツ > プログラミング入門 > Java入門 > ネットワークプログラミング > ソケット

多少語弊のある言い方だが、ソケット通信では、
ソケット(通信路もしくは相手と自分をつないでくれる郵便局のようなイメージ)に書き込んだり(手紙[オブジェクト]を送る)、
ソケットに書き込まれたものを受け取る(手紙[オブジェクト]を読む)ことで通信をしている。
この手紙を書く行為がoutputstreamクラスのwriteObjectなど,手紙の内容を読む行為がinputstreamのreadObjectとして表されているわけである。
そしてなぜ、送信側と受信側で何らかのデータ(オブジェクト)を共有していることになるかと言うと、
ServerSocketクラスのacceptなどによって、Socketクラスのインスタンス(つまり、Socketクラスに書き込まれたデータなど)を
受け取っているからである。

具体的な実装方法は以下の通りである。

サーバー側(複数のクライアントを処理するにはスレッドを使う:スレッドの作成方法は→スレッドの扱い方):
1.サーバーソケットの生成
  ServerSocket serversocket = new ServerSocket(int port);
2.クライアントからの接続待ち
  Socket socket = serversocket.accept();
3.入出力ストリーム取得
  PrintWriter writer = new PrintWriter(socket.getOutputStream(),true); //trueの意味:println()メソッドでは出力バッファをフラッシュする。
  BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  writerになんらかの形で書き込む。この辺は通常の入出力と同様な形で
  writer.println("サーバ側からの何らかのレスポンス表示とか"); //writer.write("何か");
  writer.flush(); 
  //ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
  //(String)ois.readObject();
  //ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
  //oos.writeObject("送信するメッセージなど");
  //oos.flush();
4.入出力ストリームを閉じる
  writer.close();
  reader.close();
5.ソケットを閉じる
  socket.close();
  serversocket.close();

クライアント側:
1.ソケットの生成
  Socket socket = new Socket(InetAdress adress, int port);
2.入出力ストリーム取得。ここでソケットを介してサーバーとクライアントで共有する形になる。
  PrintWriter writer = new PrintWriter(socket.getOutputStream(),true);
  BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  //ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
  //oos.writeObject("送信するメッセージなど");
  //oos.flush();
  //ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
  //(String)ois.readObject();
  //参考:outputstream型のパラメータを持つ java.io のコンストラクタ
  //http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/io/class-use/OutputStream.html
3.入出力ストリームを閉じる
  writer.close();
  reader.close();
4.ソケットを閉じる
  socket.close();
最終更新:2011年04月02日 13:56