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ないの嫌だったし、多少はね?