0

初めてこのサイトに投稿しました。転送オブジェクトを使用してソケット経由でサーバーとクライアントの接続を実装するプログラムを作成しようとしています。Java Serialization/De-SerializationTry試しにキャッチ

例外が発生した場合にオブジェクトをデシリアライズしているときに、そのオブジェクトを送信して、クライアントが接続を切断したという障害がクライアントに戻ってきたことを伝えたいとします。

これまでのところ、別のtry catchブロックで囲んでいるcatchブロック内にオブジェクトを書き込むことができました。キャッチが空です。

これは良い方法ですか?これにはよりクリーンなソリューションがありますか?オブジェクトを書くことなくクライアントに知らせる方法はありますか?

コード:

try { 
    if (transferObject.getMessage().equals("insert")){ 
     dao = new DAO(); 
     dao.insertToDB(transferObject.getObject(); 
     transferObject.setMessage("success"); 
     } 
    else if (transferObject.getMessage().equals("disconnect")) { 
     transferObject = new TransferObject("disconnect");//contructor sets object to null. 
     } 
    out.writeObject(transferObject); 
    out.flush(); 
    } catch(Exception e) { 
     transferObject = new TransferObject("failure"); 
     try { 
      out.writeObject(transferObject); 
      out.flush(); 
     } catch (Exception e) { 
     //nothing here 
     } 
    } 
+0

いいえ例外を処理する例外が発生した場合はどうなりますか? 「何もない」は適切な対応ではない。 – EJP

+0

*例外が発生した場合にオブジェクトをデシリアライズしています。そのオブジェクトを戻したい場合*例外がある場合、逆シリアル化されたオブジェクトは取得されません。 –

+0

どのようにしてクライアントがメッセージを処理し、それに応じてシャットダウンできるようにするために、transferobject(メッセージ "failure"とオブジェクトnull)を返すことができますか? – Brock

答えて

-1

あなたが正しく行っています。私が提案できることの一つは、最初の試みの外側(またはでようやく節)に{}からのwriteObject()フラッシュ()を移動することです。

try 
{ 
    if (transferObject.getMessage().equals("insert")) 
    { 
     dao = new DAO(); 
     dao.insertToDB(transferObject.getObject(); 
     transferObject.setMessage("success"); 
    } 
    else if (transferObject.getMessage().equals("disconnect")) 
    { 
     transferObject = new TransferObject("disconnect");//contructor sets object to null. 
    } 

} 
catch(Exception e) 
{ 
    transferObject = new TransferObject("failure"); 
} 

finally 
{ 
    out.writeObject(transferObject); 
    out.flush(); 
} 
+0

最後に、クライアントが切断したときのすべての私の蒸気と接続を閉じます。 – Brock

関連する問題