多少語弊のある言い方だが、ソケット通信では、
ソケット(通信路もしくは相手と自分をつないでくれる郵便局のようなイメージ)に書き込んだり(手紙[オブジェクト]を送る)、
ソケットに書き込まれたものを受け取る(手紙[オブジェクト]を読む)ことで通信をしている。
この手紙を書く行為が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