2010-06-25 3 views
2

소켓을 열면 데이터를 효율적으로 차단하는 방법은 무엇입니까? 내가 사용하는 방법은 입력 스트림에서 읽기를 호출하는 것입니다.이 방법은 입력 스트림에서 읽기를 호출하는 것입니다. 이 소켓에 기록됨).데이터 소켓을 차단하는 가장 좋은 방법

//Socket creation 
SocketForCommunication = new Socket(); 
InetSocketAddress sAddr = new InetSocketAddress("hostName", 8800); 
SocketForCommunication.connect(sAddr,10000); 
is = new DataInputStream(SocketForCommunication.getInputStream()); 
os = new DataOutputStream(SocketForCommunication.getOutputStream()); 

//Waiting on socket using read method for data 
while(true) 
{ 
    int data = is.read(); 
    if(data == HEADER_START) 
    { 
     processPackage(is); 
    } 
} 

여기서 문제는 읽을 수 있습니다. 거기에는 데이터를 소켓에서 읽을 수있을 때 호출되는 콜백을 등록하는 방법이 있습니까?

답변

1

소켓은 기본적으로 시간 초과되지만 실제로 원할 경우 변경할 수 있습니다. Socket.setSoTimeout() 호출을 참조하십시오 (타임 아웃 0은 "무한대"를 의미 함).

N.B. 타임 아웃 시간을 0으로 지정해도 O/S가 실제로 소켓을 무한정 열어 둘 수도 있고 그렇지 않을 수도 있습니다. 예를 들어, 유휴 소켓은 일정 시간 후에 닫힐 수 있습니다. 환경 (예 : 공유 웹 호스팅 환경에서는 하루에 한 번씩 (말하자면) 실행하고 유휴 소켓을 종료하는 것이 일상적이지 않습니다.

물론 네트워크에서 문제가 발생합니다. 어느 쪽이든, 무제한으로 열려있는 소켓에 의존해서는 안됩니다 ...