2013-04-15 2 views
0

문자열을 수신하기 위해 클라이언트와 연결하는 서버가 있지만 연결이 끊어진 경우 서버는 동일한 상태를 유지하고 시도하는 상태로 돌아 가지 않습니다 다시 연결합니다. setSoTimeout을 사용했으나 작동하지 않습니다. 이 예외를 던지는되지 않는 이유자바 TCP 연결에서 setSoTimeout이 작동하지 않습니다

ServerSocket welcomeSocket = null; 
       Socket connectionSocket = null; 
       BufferedOutputStream outToClient = null; 

       try { 
        System.out.println("connecting to send "+fileToSend); 

        welcomeSocket = new ServerSocket(3249); 
        connectionSocket = welcomeSocket.accept(); 



        connectionSocket.setSoTimeout(10000); 
        welcomeSocket.setSoTimeout(10000); 
        outToClient = new BufferedOutputStream(connectionSocket.getOutputStream()); 


       } catch (Exception ex) { 
        System.out.println("set so"); 
        break; 
        // Do exception handling 
       } 

누군가가 말해 주시겠습니까 : 여기

내 코드?

답변

3

실제로 SO 타임 아웃이 트리거되도록 클라이언트 입력 스트림에서 read 호출을해야합니다. 그리고 read 블록이 제한 시간 설정보다 오래 호출되는 경우에만 예외가 트리거됩니다.

또한, 서버 소켓에서 SO 타임 아웃을 설정하는 것은 쓸모가 없습니다. 서버 측에서 결코 '읽는'일이 없기 때문입니다.

+0

당신은 나에게 그 코드를 제공 할 수 있습니까? – Cbour

+0

클라이언트 소켓 입력 스트림에서 모든 read 메소드를 사용할 수 있습니다 (예 :'connectionSocket.getInputStream(). read()'). 다른 옵션에 대해서는 [Javadoc for InputStream] (http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html)을 참조하십시오. – Perception

+0

그것은 쓸모가 없습니다. accept()에 대한 시간 제한을 제공합니다. – EJP

관련 문제