もぐりの日記

雑日記

JavaのSocketを使ったストリームとかで躓いたところ

Javaアプリケーションで遊んでた時に躓いたメモ。自分の備忘録的なあれ。

とりあえずサーバーから投げたものをクライアントが受け取れるかやったら躓いた。

 

構成

サーバー⇔クライアントでsocketを使って通信。Serializableなクラスを投げあう形。

サーバー側

ObjectOutputStreamでオブジェクトを投げる。

//InfomationBase:Serializableなクラス
public void send(InfomationBase _info){
 try{
  writer = new ObjectOutputStream(socket.getOutputStream());
  writer.writeObject(_info);
 }
 catch (IOException e) {
  System.err.println("サーバサイド送信エラー");
  e.printStackTrace();
 }
}

クライアント側

ObjectInputStreamでオブジェクトを投げる。

public void run() {
 try {
  reader = new ObjectInputStream(socket.getInputStream());
  InfomationBase message = (InfomationBase) reader.readObject();
  output.setInfomation(message);//output:表示機的なクラス
 }
 catch (ClassNotFoundException e) {
  System.err.println("送られてきたオブジェクトがInfomationBaseではありません");
  e.printStackTrace();
 }
 catch (IOException e) {
  System.err.println("クライアント受信エラー");
  e.printStackTrace();
 }
 finally{
  try{
   reader.close();
  }
  catch(IOException e){
   System.err.println("受信ストリームクローズできません");
   e.printStackTrace();
  }
 }
}

おきたこと

java.net.SocketException : Connection resetってクライアント側で言われた。

解決

エラーの意味そのまんま。
http://software.fujitsu.com/jp/manual/manualfiles/M050000/B1WN5031/03/msg43/msg09893.htm
OutputStreamを開いたままサーバー側のプログラムが終了しているのが問題だった。
ちゃんと送った後に閉じるorプログラムが終了しないのどちらかすると問題なく動いた。

将来的にはサーバーとクライアントでずっと通信するしサーバーから通信切ることはないので大丈夫そうかな?

今回のオチ

つくりたてでpostないの嫌だったし、多少はね?