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 (메시지 "실패"및 객체 널과 함께)를 보낼 수 있습니까? – 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