2017-09-14 3 views
0

현재 (학습 목적으로) 클라이언트 - 서버 응용 프로그램에서 작업 중이며 DatagramSocket 시간 초과를 올바르게 설정하고 예외를 처리하는 방법을 완전히 고수했습니다.Datagramsocket setSoTimeout

서버 쪽은 다음과 같습니다

while (true) { 
    try { 
     serverSocket = new DatagramSocket(25000); 
     running = acceptConnection(serverSocket, ready); 
     serverSocket.setSoTimeout(5000); 

     while (running) { 

      receivePacket = new DatagramPacket(receiveData, receiveData.length); 
      try { 
       serverSocket.receive(receivePacket); 
      } catch (SocketTimeoutException e) { 
       System.out.println("Timed out..."); 
      } 

      receiveMessage = new String(receivePacket.getData(), 0, receivePacket.getLength()); 

      ... 

     } 

    ... 

    } catch (IOException e) { 
     System.err.println(""); 
    } finally { 
     serverSocket.close(); 
    } 

    ... 
} 

는 내가 뭘 타임 아웃의 경우에하고 싶은 것은 내가 다른 클라이언트를 처리 할 수 ​​있도록 주 동안 루프로 돌아갈 것입니다. 서버는 한 번에 하나의 클라이언트 만 처리하도록 설계되었습니다.

catch 블록에 running = false;을 추가하려고했지만 작동하지 않았습니다.

+0

while 루프 전체를 표시하십시오. catch 블록이 어느 레이어에 있는지는 분명하지 않습니다. –

+0

나는 지금 포스트를 편집하고 설명했다. 오해를해서 죄송합니다. – ZeppRock

+0

연결 시간 초과시 유도 된 재귀를 사용하여 메소드를 호출하는 방법 –

답변

1

OP가 소켓 수신 시간이 초과되면 while(true) 루프로 돌아 오는 방법을 이제 while(running) 루프에서 벗어났습니다.

나는 을 붙잡은 후에 break 키워드를 사용하라고 말했고, 그는이 문제를 해결했다고 언급했다.