2014-06-15 3 views
0

서버에 연결하기 위해 루프로 3 번 시도하는 네트워크 클라이언트가 있습니다. 이 시간 동안 저는 수면 스레드를 사용합니다. Thread.sleep(700);을 클라이언트 연결 직후 대기 기간을 건너 뛰는 코드로 바꿀 수있는 방법이 있습니까?스레드 수면 연결

NClient pc; 

if (pc == null) 
{ 
    try 
    { 
     Thread.sleep(700); 
    } 
    catch (InterruptedException x) 
    { 
     //TODO 
    } 

    if (pc != null) 
    { 
     outPrint.println("Connected"); 
     break; 
    } 
} 

연결 협상이 진행되는 대기 기간을 줄여 사용자 환경을 개선하고 싶습니다. 이 작업을 수행하는 Java의 옵션은 무엇입니까?

+2

왜? connect() 메서드는 어쨌든 차단됩니다. 다른 수면이 필요하지 않습니다. – EJP

답변

1

이 질문에 대한 대답은 NClient의 구현에 따라 다릅니다. 일반적으로이 경우 connect timeout을 사용합니다. 아래 예제는 Socket으로이를 수행하는 방법을 나타냅니다. 나는 NClient이 무엇인지 모르므로, 불행히도 NClient 예제를 줄 수는 없습니다.

연결을 시도하는 방법 작성 - 업 위의 시간

Socket connectToServer() { 
    Socket socket = new Socket(); 
    final int connectTimeoutMs = 700; 
    for (int i=0; i<3; i++) { 
    try { 
     // the call to connect blocks the current thread for a maximum of 700ms if it can't connect 
     socket.connect(new InetSocketAddress("localhost", 8080), connectTimeoutMs); 
    } catch (IOException e) { 
     // failed to successfully connect within 700 milliseconds 
     e.printStackTrace(); 
    } 
    } 
    return socket; 
} 

사용 3 짧은에서

Socket socket = connectToServer(); 
if (socket.isConnected()) { 
    // do stuff with the valid socket! 
} 

가하는 connect timeout을 사용하여 다음과 같이!